@keber/qa-framework 1.11.3 → 1.13.0
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/CHANGELOG.md +340 -0
- package/README.md +42 -2
- package/docs/architecture.md +30 -26
- package/docs/decisions/lane-heartbeat-caller.md +86 -0
- package/docs/final-report.md +23 -23
- package/docs/folder-structure-guide.md +100 -80
- package/docs/installation.md +42 -7
- package/docs/skills-architecture.md +23 -23
- package/docs/spec-driven-philosophy.md +9 -9
- package/docs/usage-with-agent.md +88 -9
- package/docs/visuals/diag-01-ejecutivo-1.png +0 -0
- package/docs/visuals/diag-02-tactico-1.png +0 -0
- package/docs/visuals/diag-03-tecnico-1.png +0 -0
- package/docs/visuals/info-01-ejecutivo-1.png +0 -0
- package/docs/visuals/info-02-tactico-1.png +0 -0
- package/docs/visuals/info-03-tecnico-1.png +0 -0
- package/docs/visuals/pres-01-ejecutivo-1.png +0 -0
- package/docs/visuals/pres-02-tactico-1.png +0 -0
- package/docs/visuals/pres-03-tecnico-1.png +0 -0
- package/docs/visuals/qa-01-problema-1.png +0 -0
- package/docs/visuals/qa-02-que-es-1.png +0 -0
- package/docs/visuals/qa-03-pipeline-1.png +0 -0
- package/docs/visuals/qa-04-6-archivos-1.png +0 -0
- package/docs/visuals/qa-05-humano-1.png +0 -0
- package/docs/visuals/qa-06-agente-1.png +0 -0
- package/docs/visuals/qa-07-skills-arch-1.png +0 -0
- package/docs/visuals/qa-08-traceability-1.png +0 -0
- package/docs/visuals/qa-en-01-problem-1.png +0 -0
- package/docs/visuals/qa-en-02-what-is-1.png +0 -0
- package/docs/visuals/qa-en-03-pipeline-1.png +0 -0
- package/docs/visuals/qa-en-04-6files-1.png +0 -0
- package/docs/visuals/qa-en-05-human-1.png +0 -0
- package/docs/visuals/qa-en-06-agent-1.png +0 -0
- package/docs/visuals/qa-en-07-skills-arch-1.png +0 -0
- package/docs/visuals/qa-en-08-traceability-1.png +0 -0
- package/examples/module-example/suppliers/00-inventory.md +1 -1
- package/examples/module-example/suppliers/suppliers-create.spec.ts +8 -8
- package/integrations/ado-powershell/README.md +1 -1
- package/integrations/ado-powershell/scripts/sync-ado-titles.ps1 +2 -2
- package/integrations/playwright/README.md +4 -4
- package/package.json +7 -3
- package/qa-framework.config.json +25 -3
- package/scripts/check-forbidden-chars.js +187 -0
- package/scripts/check-spanish-accents.js +159 -0
- package/scripts/cli.js +1 -1
- package/scripts/generate.js +2 -2
- package/scripts/init.js +101 -12
- package/scripts/lib/claude-agents.js +347 -0
- package/scripts/lib/claude-commands.js +56 -0
- package/scripts/lib/module-keys.js +54 -0
- package/scripts/sync-version.js +63 -0
- package/scripts/upgrade.js +369 -20
- package/scripts/validate.js +46 -21
- package/skills/qa-ado-integration/SKILL.md +19 -19
- package/skills/qa-ado-integration/references/scripts-and-config.md +6 -6
- package/skills/qa-automation/SKILL.md +49 -27
- package/skills/qa-automation/references/config-checklist.md +4 -4
- package/skills/qa-automation/references/dom-inspection-template.js +7 -7
- package/skills/qa-automation/references/patterns.md +20 -20
- package/skills/qa-automation/references/pom-template.md +161 -0
- package/skills/qa-maintenance/SKILL.md +11 -11
- package/skills/qa-maintenance/references/update-rules.md +8 -8
- package/skills/qa-module-analysis/SKILL.md +20 -19
- package/skills/qa-module-analysis/references/exploration-checklist.md +4 -4
- package/skills/qa-module-analysis/references/output-verification.md +69 -0
- package/skills/qa-module-analysis/references/spec-file-formats.md +14 -14
- package/skills/qa-spec-generation/SKILL.md +13 -7
- package/skills/qa-test-cases/SKILL.md +11 -81
- package/skills/qa-test-cases/references/test-case-template.md +5 -5
- package/skills/qa-test-plan/SKILL.md +22 -86
- package/skills/qa-test-plan/references/plan-de-pruebas-template.md +24 -24
- package/skills/qa-test-stabilization/SKILL.md +59 -30
- package/skills/qa-test-stabilization/references/classification-protocol.md +35 -35
- package/templates/agent-next-steps.md +10 -10
- package/templates/agents/qa-analisis.md +142 -0
- package/templates/agents/qa-asesoria.md +48 -0
- package/templates/agents/qa-informe-resultados.md +236 -0
- package/templates/agents/qa-investigador.md +143 -0
- package/templates/agents/qa-plan.md +131 -0
- package/templates/agents/qa-reporte-ejecucion.md +138 -0
- package/templates/automation-scaffold/.env.example +36 -6
- package/templates/automation-scaffold/fixtures/auth.ts +27 -5
- package/templates/automation-scaffold/fixtures/base.ts +23 -1
- package/templates/automation-scaffold/fixtures/test-helpers.ts +1 -1
- package/templates/automation-scaffold/global-setup.ts +117 -48
- package/templates/automation-scaffold/playwright.config.ts +72 -32
- package/templates/automation-scaffold/scripts/global-setup-guards.js +184 -0
- package/templates/automation-scaffold/scripts/lane-config.js +269 -0
- package/templates/automation-scaffold/scripts/lane-lock.js +589 -0
- package/templates/defect-report.md +17 -3
- package/templates/execution-report.md +9 -9
- package/templates/integration-scaffold/.env.example +1 -1
- package/templates/integration-scaffold/global-setup.ts +21 -1
- package/templates/integration-scaffold/playwright.config.ts +15 -1
- package/templates/qa-framework.instructions.md +9 -8
- package/templates/qa-framework.rules.md +53 -0
- package/templates/qa-readme.md +8 -8
- package/templates/session-summary.md +2 -2
- package/templates/specification/00-inventory.md +3 -3
- package/templates/specification/01-business-rules.md +6 -6
- package/templates/specification/02-workflows.md +1 -1
- package/templates/specification/03-roles-permissions.md +1 -1
- package/templates/specification/04-test-data.md +8 -8
- package/templates/specification/05-test-scenarios.md +5 -5
- package/templates/test-case.md +3 -3
- package/templates/test-data-guidelines.md +7 -7
- package/templates/test-plan-sprint.md +13 -13
- package/templates/test-plan.md +3 -3
- package/skills/qa-test-plan/references/priority-and-feasibility.md +0 -159
|
@@ -16,9 +16,9 @@ The 3-layer skill architecture reduces this to ~500 tokens for a typical task, l
|
|
|
16
16
|
|
|
17
17
|
| Layer | Location | Size | Purpose |
|
|
18
18
|
|---|---|---|---|
|
|
19
|
-
| 1
|
|
20
|
-
| 2
|
|
21
|
-
| 3
|
|
19
|
+
| 1 - Descriptor | YAML frontmatter in `SKILL.md` | ~50 tokens | Name + description; used for relevance detection |
|
|
20
|
+
| 2 - Process outline | `SKILL.md` body | ~400-600 tokens | Step-by-step process without code; always loaded when skill applies |
|
|
21
|
+
| 3 - Reference material | `references/*.md` | ~500-1500 tokens each | Detailed templates, code patterns, decision trees; loaded on demand |
|
|
22
22
|
|
|
23
23
|
The agent reads Layer 2 to understand what to do, then loads only the specific `references/` files it needs for the current step.
|
|
24
24
|
|
|
@@ -26,7 +26,7 @@ The agent reads Layer 2 to understand what to do, then loads only the specific `
|
|
|
26
26
|
|
|
27
27
|
## Pipeline Sequence
|
|
28
28
|
|
|
29
|
-
Skills map to the QA pipeline stages defined in `copilot-instructions.md`. The file acts as a **pipeline sequencer**
|
|
29
|
+
Skills map to the QA pipeline stages defined in `copilot-instructions.md`. The file acts as a **pipeline sequencer** - it defines which stage comes before which, and what the prerequisite is. Skills are the implementation of each stage.
|
|
30
30
|
|
|
31
31
|
```
|
|
32
32
|
Stage 1: qa-module-analysis (no prerequisite)
|
|
@@ -61,12 +61,12 @@ Optional (any time after Stage 4):
|
|
|
61
61
|
|---|---|---|
|
|
62
62
|
| `qa-module-analysis` | Stage 1 process (4 phases) | `exploration-checklist.md`, `spec-file-formats.md` |
|
|
63
63
|
| `qa-spec-generation` | Stage 2 rules + anti-patterns | `spec-file-formats.md` (shared with qa-module-analysis) |
|
|
64
|
-
| `qa-test-plan` | Stage 3
|
|
65
|
-
| `qa-test-cases` | Stage 4
|
|
66
|
-
| `qa-automation` | Stage 5
|
|
67
|
-
| `qa-test-stabilization` | Stage 5b
|
|
68
|
-
| `qa-ado-integration` | Optional ADO sync
|
|
69
|
-
| `qa-maintenance` | Stage 6
|
|
64
|
+
| `qa-test-plan` | Stage 3 - Plan de Pruebas generation | `plan-de-pruebas-template.md` (includes priority + feasibility rules) |
|
|
65
|
+
| `qa-test-cases` | Stage 4 - TC document rules | `test-case-template.md` |
|
|
66
|
+
| `qa-automation` | Stage 5 - patterns + completion checklist | `patterns.md`, `config-checklist.md` |
|
|
67
|
+
| `qa-test-stabilization` | Stage 5b - 8 steps + confidence scoring | `classification-protocol.md` (includes report template) |
|
|
68
|
+
| `qa-ado-integration` | Optional ADO sync - 6 steps | `scripts-and-config.md` |
|
|
69
|
+
| `qa-maintenance` | Stage 6 - update rules | `update-rules.md` |
|
|
70
70
|
|
|
71
71
|
---
|
|
72
72
|
|
|
@@ -85,7 +85,7 @@ When a consumer project runs `npm install @keber/qa-framework`, the `postinstall
|
|
|
85
85
|
SKILL.md
|
|
86
86
|
...
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
-> copies to ->
|
|
89
89
|
|
|
90
90
|
{consumer-project}/.github/skills/
|
|
91
91
|
qa-module-analysis/
|
|
@@ -96,7 +96,7 @@ When a consumer project runs `npm install @keber/qa-framework`, the `postinstall
|
|
|
96
96
|
...
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
-
The copy uses `writeIfMissing`
|
|
99
|
+
The copy uses `writeIfMissing` - it will not overwrite files that already exist in the consumer project. This allows consumer projects to customize their `.github/skills/` without losing changes on re-install.
|
|
100
100
|
|
|
101
101
|
---
|
|
102
102
|
|
|
@@ -112,7 +112,7 @@ Consumer projects can extend the skills by adding skill folders directly to `.gi
|
|
|
112
112
|
Describe when this skill should be triggered.
|
|
113
113
|
---
|
|
114
114
|
```
|
|
115
|
-
2. Add the skill body following the same 4-section structure: prerequisite
|
|
115
|
+
2. Add the skill body following the same 4-section structure: prerequisite -> steps -> rules -> outputs
|
|
116
116
|
3. Optionally add `references/*.md` for detailed templates
|
|
117
117
|
4. Reference the skill from `copilot-instructions.md` if it's part of your pipeline
|
|
118
118
|
|
|
@@ -124,13 +124,13 @@ Project-specific skills are not overwritten by `npm install` updates.
|
|
|
124
124
|
|
|
125
125
|
| Former file | New skill | Token reduction |
|
|
126
126
|
|---|---|---|
|
|
127
|
-
| `agent-instructions/00-module-analysis.md` | `.github/skills/qa-module-analysis/SKILL.md` | ~2,500
|
|
128
|
-
| `agent-instructions/01-spec-generation.md` | `.github/skills/qa-spec-generation/SKILL.md` | ~2,800
|
|
129
|
-
| `agent-instructions/02-test-plan-generation.md` | `.github/skills/qa-test-plan/SKILL.md` | ~2,200
|
|
130
|
-
| `agent-instructions/03-test-case-generation.md` | `.github/skills/qa-test-cases/SKILL.md` | ~2,100
|
|
131
|
-
| `agent-instructions/04-automation-generation.md` | `.github/skills/qa-automation/SKILL.md` | ~3,500
|
|
132
|
-
| `agent-instructions/04b-test-stabilization.md` | `.github/skills/qa-test-stabilization/SKILL.md` | ~3,800
|
|
133
|
-
| `agent-instructions/05-ado-integration.md` | `.github/skills/qa-ado-integration/SKILL.md` | ~2,400
|
|
134
|
-
| `agent-instructions/06-maintenance.md` | `.github/skills/qa-maintenance/SKILL.md` | ~1,700
|
|
135
|
-
|
|
136
|
-
**Total context reduction**: ~21,000 tokens
|
|
127
|
+
| `agent-instructions/00-module-analysis.md` | `.github/skills/qa-module-analysis/SKILL.md` | ~2,500 -> ~500 + on-demand references |
|
|
128
|
+
| `agent-instructions/01-spec-generation.md` | `.github/skills/qa-spec-generation/SKILL.md` | ~2,800 -> ~400 + shared references |
|
|
129
|
+
| `agent-instructions/02-test-plan-generation.md` | `.github/skills/qa-test-plan/SKILL.md` | ~2,200 -> ~400 + test-plan-template |
|
|
130
|
+
| `agent-instructions/03-test-case-generation.md` | `.github/skills/qa-test-cases/SKILL.md` | ~2,100 -> ~400 + tc-template |
|
|
131
|
+
| `agent-instructions/04-automation-generation.md` | `.github/skills/qa-automation/SKILL.md` | ~3,500 -> ~500 + patterns + config |
|
|
132
|
+
| `agent-instructions/04b-test-stabilization.md` | `.github/skills/qa-test-stabilization/SKILL.md` | ~3,800 -> ~500 + classification |
|
|
133
|
+
| `agent-instructions/05-ado-integration.md` | `.github/skills/qa-ado-integration/SKILL.md` | ~2,400 -> ~400 + scripts |
|
|
134
|
+
| `agent-instructions/06-maintenance.md` | `.github/skills/qa-maintenance/SKILL.md` | ~1,700 -> ~400 + update-rules |
|
|
135
|
+
|
|
136
|
+
**Total context reduction**: ~21,000 tokens -> ~3,500 tokens (Layer 2 only) + selective Layer 3 loading
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# docs/spec-driven-philosophy.md
|
|
2
2
|
|
|
3
|
-
## Spec-Driven Automated Testing
|
|
3
|
+
## Spec-Driven Automated Testing - Core Philosophy
|
|
4
4
|
|
|
5
5
|
This document explains the methodology that underpins the entire `qa-framework`.
|
|
6
6
|
|
|
@@ -34,7 +34,7 @@ A test case with origin `PENDING-CODE` or `BLOCKED-PERMISSIONS` must be in `test
|
|
|
34
34
|
## The Spec-Before-Automation Rule
|
|
35
35
|
|
|
36
36
|
```
|
|
37
|
-
Specification exists FIRST
|
|
37
|
+
Specification exists FIRST -> Automation comes second
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
Automation artifacts (spec files, page objects) always reference a spec TC-ID. It is never acceptable to write a Playwright test without a corresponding TC in `05-test-scenarios.md`.
|
|
@@ -90,10 +90,10 @@ E2E tests should NOT try to cover:
|
|
|
90
90
|
|
|
91
91
|
| Priority | Meaning | Target in automation |
|
|
92
92
|
|---|---|---|
|
|
93
|
-
| **P0** | Critical
|
|
94
|
-
| **P1** | High
|
|
95
|
-
| **P2** | Medium
|
|
96
|
-
| **P3** | Low
|
|
93
|
+
| **P0** | Critical - system unusable without this | Must be automated |
|
|
94
|
+
| **P1** | High - significant impact if broken | Should be automated |
|
|
95
|
+
| **P2** | Medium - moderate impact | Automate if feasible |
|
|
96
|
+
| **P3** | Low - minor impact | Manual testing acceptable |
|
|
97
97
|
|
|
98
98
|
In the automation suite, P0 tests form the **smoke suite** that runs on every CI build.
|
|
99
99
|
P1 tests run on scheduled runs or before each release.
|
|
@@ -165,6 +165,6 @@ This framework supports both:
|
|
|
165
165
|
| Maintenance after code change | Agent + Human review |
|
|
166
166
|
|
|
167
167
|
The handoff between agent and human should always happen at a known checkpoint:
|
|
168
|
-
- After the spec set is produced
|
|
169
|
-
- After automation is written
|
|
170
|
-
- After a defect is filed
|
|
168
|
+
- After the spec set is produced -> human reviews before automation is written
|
|
169
|
+
- After automation is written -> human reviews coverage mapping
|
|
170
|
+
- After a defect is filed -> human decides priority and fix approach
|
package/docs/usage-with-agent.md
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# docs/usage-with-agent.md
|
|
2
2
|
|
|
3
|
-
## Using `qa-framework` with an IDE Agent (GitHub Copilot)
|
|
3
|
+
## Using `qa-framework` with an IDE Agent (GitHub Copilot or Claude Code)
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## Overview
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
`init` and `upgrade` always generate artifacts for both GitHub Copilot and Claude Code
|
|
10
|
+
in parallel - there is no agent detection. This framework is designed so that either
|
|
11
|
+
IDE agent can:
|
|
10
12
|
|
|
11
13
|
1. Understand the QA structure by reading the agent instruction files
|
|
12
14
|
2. Navigate the `qa/` directory predictably
|
|
@@ -42,11 +44,11 @@ This framework is designed so that an IDE agent (such as GitHub Copilot in VS Co
|
|
|
42
44
|
|
|
43
45
|
---
|
|
44
46
|
|
|
45
|
-
## Setting Up Agent Instructions in VS Code
|
|
47
|
+
## Setting Up Agent Instructions in VS Code (GitHub Copilot)
|
|
46
48
|
|
|
47
|
-
### Option A
|
|
49
|
+
### Option A - Workspace instructions file (recommended)
|
|
48
50
|
|
|
49
|
-
`init` generates `.github/
|
|
51
|
+
`init` generates `.github/instructions/qa-framework.instructions.md` automatically. It contains the full
|
|
50
52
|
pipeline sequencer with 11 agent behavior rules, the QA pipeline table, and ADO detection.
|
|
51
53
|
No manual setup needed.
|
|
52
54
|
|
|
@@ -56,7 +58,7 @@ To regenerate after an upgrade:
|
|
|
56
58
|
npx qa-framework upgrade
|
|
57
59
|
```
|
|
58
60
|
|
|
59
|
-
### Option B
|
|
61
|
+
### Option B - Reference skills directly in the agent conversation
|
|
60
62
|
|
|
61
63
|
Paste a skill path into the Copilot chat:
|
|
62
64
|
|
|
@@ -64,7 +66,7 @@ Paste a skill path into the Copilot chat:
|
|
|
64
66
|
Read .github/skills/qa-module-analysis/SKILL.md and analyze the module at {URL}
|
|
65
67
|
```
|
|
66
68
|
|
|
67
|
-
### Option C
|
|
69
|
+
### Option C - Individual task prompts
|
|
68
70
|
|
|
69
71
|
For each major QA task, ask the agent to load the relevant skill:
|
|
70
72
|
|
|
@@ -75,6 +77,82 @@ tests for the submodule {name}
|
|
|
75
77
|
|
|
76
78
|
---
|
|
77
79
|
|
|
80
|
+
## Setting Up Agent Instructions in Claude Code
|
|
81
|
+
|
|
82
|
+
`init` and `upgrade` generate two Claude-Code-native artifacts automatically, no manual
|
|
83
|
+
setup needed:
|
|
84
|
+
|
|
85
|
+
- `.claude/rules/qa-framework.md` - the Claude Code equivalent of the Copilot
|
|
86
|
+
`.instructions.md` file. It has no frontmatter, which means it loads unconditionally in
|
|
87
|
+
every session (the same effect as `applyTo: '**'`). It contains the same 11 agent
|
|
88
|
+
behavior rules and pipeline table as the Copilot instructions, with every skill
|
|
89
|
+
reference expressed as a `/qa-{name}` slash command instead of "load this file".
|
|
90
|
+
- `.claude/commands/qa-{name}.md` - one thin wrapper per skill, generated dynamically
|
|
91
|
+
from whatever folders exist under `.github/skills/` at install/upgrade time. Each
|
|
92
|
+
wrapper is a single instruction: `Read the full skill at .github/skills/qa-{name}/SKILL.md
|
|
93
|
+
FIRST, then follow its instructions exactly`, plus the stage prerequisite. There is zero
|
|
94
|
+
duplication of skill content and therefore zero drift - if a skill is updated, every
|
|
95
|
+
command that points to it picks up the change with no regeneration needed.
|
|
96
|
+
|
|
97
|
+
### Using a command
|
|
98
|
+
|
|
99
|
+
In a Claude Code session, invoke the pipeline stage directly:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
/qa-module-analysis
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Claude reads `.github/skills/qa-module-analysis/SKILL.md` and follows it exactly, the
|
|
106
|
+
same way the Copilot pipeline table routes to that file.
|
|
107
|
+
|
|
108
|
+
### Regenerating after an upgrade
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
npx qa-framework upgrade
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
This refreshes both `.claude/commands/qa-*.md` and `.claude/rules/qa-framework.md` the
|
|
115
|
+
same safe way it refreshes the Copilot artifacts (framework-owned, always overwritten
|
|
116
|
+
with the current version; nothing else under `.claude/` is touched).
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Optional: ANALISIS/PLAN Mode (Claude Code only, ADO-gated)
|
|
121
|
+
|
|
122
|
+
Some teams run a sprint-centric manual testing workflow in parallel with the 6-stage
|
|
123
|
+
pipeline: an analysis document, a test plan trace-linked to Azure DevOps work items,
|
|
124
|
+
ad-hoc QA advisory chat, and a sprint closing results report. This mode is:
|
|
125
|
+
|
|
126
|
+
- **Optional** - off by default.
|
|
127
|
+
- **Gated** by `integrations.azureDevOps.sprintCycle.enabled` in
|
|
128
|
+
`qa/qa-framework.config.json` (it requires Azure DevOps enabled, since most of the
|
|
129
|
+
agents depend on ADO work items or an ADO-generated execution report).
|
|
130
|
+
- **Claude Code only, by design, not by omission.** Each agent is a Claude Code subagent
|
|
131
|
+
with its own `tools`/`model` frontmatter (e.g. `qa-asesoria` intentionally has no
|
|
132
|
+
`Write`/`Bash`). GitHub Copilot has no equivalent primitive, so no `.github/` artifact
|
|
133
|
+
is generated for this mode.
|
|
134
|
+
|
|
135
|
+
When enabled, `init`/`upgrade` generate six subagents under `.claude/agents/`:
|
|
136
|
+
|
|
137
|
+
| Agent | Purpose |
|
|
138
|
+
|---|---|
|
|
139
|
+
| `qa-analisis.md` | Analysis document: test universe, automation feasibility, P0-P3 prioritization, excluded universe, traceability matrix |
|
|
140
|
+
| `qa-plan.md` | Default mode: executive summary + a trace-linked test case table, executable within the configured manual-testing timebox |
|
|
141
|
+
| `qa-asesoria.md` | Chat-only QA advisory (no `Write`/`Bash`) - answers point questions, redirects to `qa-plan`/`qa-analisis` when a full document is actually needed |
|
|
142
|
+
| `qa-reporte-ejecucion.md` | Exports the ADO test plan results, versions the raw export under `ado-export-<YYYY-MM-DD>/` and writes the sprint `Reporte-de-Ejecucion-de-Pruebas-<project>-Sprint-<N>.md` (summary + promoted findings) |
|
|
143
|
+
| `qa-informe-resultados.md` | Narrative sprint closing report built from the Reporte produced by `qa-reporte-ejecucion`; updates incrementally, never overwrites prior sections |
|
|
144
|
+
| `qa-investigador.md` | Investigates one concrete root cause against the real environment and returns a verdict with evidence. Gets Playwright MCP browser tools for every `parallelLanes` lane with an `mcpNamespace`; with no such lane it works without a browser |
|
|
145
|
+
|
|
146
|
+
Sprint duration, manual-testing timebox, date format, timezone and the approval threshold
|
|
147
|
+
(`approvalThresholdPercent`, default 85) are parameterized from
|
|
148
|
+
`integrations.azureDevOps.sprintCycle` (with neutral defaults - 8-day sprint, 2-day
|
|
149
|
+
timebox, `dd-mm-aaaa`, `America/Santiago` - when a field is omitted). The optional
|
|
150
|
+
`conventions.decimalSeparator` and `conventions.defectIdPrefix` override values otherwise
|
|
151
|
+
derived from the locale and the project name. See [docs/installation.md](installation.md)
|
|
152
|
+
for the config shape.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
78
156
|
## Typical Agent Session Workflow
|
|
79
157
|
|
|
80
158
|
### Session 1: Initial Module Analysis
|
|
@@ -124,7 +202,7 @@ tests for the submodule {name}
|
|
|
124
202
|
|
|
125
203
|
### DO
|
|
126
204
|
|
|
127
|
-
- Read `qa/AGENT-NEXT-STEPS.md` at the start of each conversation (auto-enforced by
|
|
205
|
+
- Read `qa/AGENT-NEXT-STEPS.md` at the start of each conversation (auto-enforced by `.github/instructions/qa-framework.instructions.md` for Copilot, or `.claude/rules/qa-framework.md` for Claude Code)
|
|
128
206
|
- Load the relevant skill from `.github/skills/` before starting any QA task
|
|
129
207
|
- Save all artifacts in the exact path specified by `qa/QA-STRUCTURE-GUIDE.md`
|
|
130
208
|
- Use TC-ID, RN-ID, FL-ID naming consistently
|
|
@@ -181,7 +259,8 @@ This performs:
|
|
|
181
259
|
## Continuing from a Previous Session
|
|
182
260
|
|
|
183
261
|
The agent reads `qa/AGENT-NEXT-STEPS.md` automatically at the start of every conversation
|
|
184
|
-
(enforced by `.github/
|
|
262
|
+
(enforced by rule 0 in `.github/instructions/qa-framework.instructions.md` for Copilot,
|
|
263
|
+
or `.claude/rules/qa-framework.md` for Claude Code). For additional context:
|
|
185
264
|
|
|
186
265
|
```
|
|
187
266
|
"Read qa/README.md and qa/memory/INDEX.md, then tell me where we left off."
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -15,16 +15,16 @@
|
|
|
15
15
|
|
|
16
16
|
import { test, expect } from '@playwright/test';
|
|
17
17
|
|
|
18
|
-
// EXEC_IDX: unique per minute-window
|
|
18
|
+
// EXEC_IDX: unique per minute-window - prevents data collisions between runs
|
|
19
19
|
const EXEC_IDX = Math.floor(Date.now() / 60_000) % 100_000;
|
|
20
20
|
|
|
21
21
|
test.describe('Suppliers > Create @P0', () => {
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
* [TC-SUP-CR-001] Create supplier
|
|
24
|
+
* [TC-SUP-CR-001] Create supplier - happy path @P0
|
|
25
25
|
* Verifies the complete create flow for a valid supplier.
|
|
26
26
|
*/
|
|
27
|
-
test('[TC-SUP-CR-001] Create supplier
|
|
27
|
+
test('[TC-SUP-CR-001] Create supplier - happy path @P0', async ({ page }) => {
|
|
28
28
|
const supplierName = `QA-Supplier-${EXEC_IDX}`;
|
|
29
29
|
const supplierRut = `${EXEC_IDX}-K`;
|
|
30
30
|
const supplierEmail = `qa-supplier-${EXEC_IDX}@example.com`;
|
|
@@ -57,10 +57,10 @@ test.describe('Suppliers > Create @P0', () => {
|
|
|
57
57
|
});
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
|
-
* [TC-SUP-CR-002] Create supplier
|
|
60
|
+
* [TC-SUP-CR-002] Create supplier - required fields validation @P0
|
|
61
61
|
* Verifies that the form prevents submission when required fields are empty.
|
|
62
62
|
*/
|
|
63
|
-
test('[TC-SUP-CR-002] Create supplier
|
|
63
|
+
test('[TC-SUP-CR-002] Create supplier - required fields validation @P0', async ({ page }) => {
|
|
64
64
|
await page.goto('/suppliers');
|
|
65
65
|
await page.locator('button:has-text("New Supplier")').click();
|
|
66
66
|
await expect(page.locator('.supplier-modal')).toBeVisible();
|
|
@@ -79,12 +79,12 @@ test.describe('Suppliers > Create @P0', () => {
|
|
|
79
79
|
});
|
|
80
80
|
|
|
81
81
|
/**
|
|
82
|
-
* [TC-SUP-CR-003] Create supplier
|
|
82
|
+
* [TC-SUP-CR-003] Create supplier - duplicate RUT rejected @P0
|
|
83
83
|
*
|
|
84
|
-
* NOTE: test.skip active
|
|
84
|
+
* NOTE: test.skip active - DEF-001: Duplicate RUT check not enforced server-side.
|
|
85
85
|
* Reactivate when ADO #99001 is resolved.
|
|
86
86
|
*/
|
|
87
|
-
test('[TC-SUP-CR-003] Create supplier
|
|
87
|
+
test('[TC-SUP-CR-003] Create supplier - duplicate RUT rejected @P0', async ({ page }) => {
|
|
88
88
|
test.skip(true,
|
|
89
89
|
'DEF-001: Duplicate RUT validation not enforced. Reactivate when ADO #99001 is resolved.'
|
|
90
90
|
);
|
|
@@ -61,7 +61,7 @@ foreach ($entry in $mapping) {
|
|
|
61
61
|
Select-Object -First 1
|
|
62
62
|
|
|
63
63
|
if (-not $specFile) {
|
|
64
|
-
Write-Warning " [NOT FOUND] $($entry.specFile)
|
|
64
|
+
Write-Warning " [NOT FOUND] $($entry.specFile) - skipping WI $adoId"
|
|
65
65
|
$skipped++
|
|
66
66
|
continue
|
|
67
67
|
}
|
|
@@ -84,7 +84,7 @@ foreach ($entry in $mapping) {
|
|
|
84
84
|
|
|
85
85
|
if ($PSCmdlet.ShouldProcess("WI #$adoId", "Update title to: $newTitle")) {
|
|
86
86
|
Invoke-RestMethod -Method Patch -Uri $patchUrl -Headers $headers -Body $body | Out-Null
|
|
87
|
-
Write-Host " [SYNCED] WI #$adoId
|
|
87
|
+
Write-Host " [SYNCED] WI #$adoId -> $newTitle"
|
|
88
88
|
$synced++
|
|
89
89
|
}
|
|
90
90
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Integration
|
|
1
|
+
# Integration - Playwright
|
|
2
2
|
|
|
3
3
|
This directory documents how `@playwright/test` is configured within the
|
|
4
4
|
`keber/qa-framework` opinionated setup.
|
|
@@ -40,9 +40,9 @@ suite execution.
|
|
|
40
40
|
|
|
41
41
|
## Debugging checklist
|
|
42
42
|
|
|
43
|
-
1. `PWDEBUG=1 npx playwright test`
|
|
44
|
-
2. `--headed`
|
|
45
|
-
3. `--trace on`
|
|
43
|
+
1. `PWDEBUG=1 npx playwright test` - step through in inspector
|
|
44
|
+
2. `--headed` - watch the browser
|
|
45
|
+
3. `--trace on` - record full trace; open with `npx playwright show-trace`
|
|
46
46
|
4. Increase `actionTimeout` if the app has slow server-side rendering
|
|
47
47
|
5. Add `await page.waitForLoadState('networkidle')` before assertions on
|
|
48
48
|
dynamically loaded content
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keber/qa-framework",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.0",
|
|
4
4
|
"description": "Reusable spec-driven QA framework for IDE-agent-assisted automated testing. Installable as an npm package. Provides structure, templates, agent instructions, and optional integrations for Playwright and Azure DevOps.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"qa",
|
|
@@ -21,7 +21,11 @@
|
|
|
21
21
|
"postinstall": "node scripts/init.js --skip-if-exists",
|
|
22
22
|
"init": "node scripts/cli.js init",
|
|
23
23
|
"generate": "node scripts/cli.js generate",
|
|
24
|
-
"validate": "node scripts/cli.js validate"
|
|
24
|
+
"validate": "node scripts/cli.js validate",
|
|
25
|
+
"check-accents": "node scripts/check-spanish-accents.js",
|
|
26
|
+
"check-chars": "node scripts/check-forbidden-chars.js",
|
|
27
|
+
"test": "node --test test/*.test.js",
|
|
28
|
+
"version": "node scripts/sync-version.js && git add README.md .github/copilot-instructions.md qa-framework.config.json"
|
|
25
29
|
},
|
|
26
30
|
"files": [
|
|
27
31
|
"agent-instructions/",
|
|
@@ -36,7 +40,7 @@
|
|
|
36
40
|
"qa-framework.config.json"
|
|
37
41
|
],
|
|
38
42
|
"engines": {
|
|
39
|
-
"node": ">=
|
|
43
|
+
"node": ">=20"
|
|
40
44
|
},
|
|
41
45
|
"peerDependencies": {
|
|
42
46
|
"@keber/ado-qa": ">=1.0.0",
|
package/qa-framework.config.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./qa-framework.config.schema.json",
|
|
3
|
-
"frameworkVersion": "1.
|
|
3
|
+
"frameworkVersion": "1.13.0",
|
|
4
4
|
|
|
5
5
|
"project": {
|
|
6
6
|
"name": "{{PROJECT_NAME}}",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"testCaseIdPattern": "TC-{MODULE}-{SUBMODULE}-{NUM}",
|
|
28
28
|
"businessRuleIdPattern": "RN-{MODULE}-{NUM}",
|
|
29
29
|
"workflowIdPattern": "FL-{MODULE}-{NUM}",
|
|
30
|
-
"defectIdPattern": "DEF-{NUM}",
|
|
30
|
+
"defectIdPattern": "DEF-{PREFIX}-{NUM}",
|
|
31
31
|
"testNamingPattern": "[{ID}] {title} @{priority}",
|
|
32
32
|
"timestampFormat": "YYYY-MM-DD_HH-MM-SS",
|
|
33
33
|
"tcPriorityLevels": ["P0", "P1", "P2", "P3"]
|
|
@@ -42,6 +42,20 @@
|
|
|
42
42
|
}
|
|
43
43
|
],
|
|
44
44
|
|
|
45
|
+
"parallelLanes": {
|
|
46
|
+
"enabled": false,
|
|
47
|
+
"lanes": [
|
|
48
|
+
{
|
|
49
|
+
"id": "1",
|
|
50
|
+
"account": "QA_USER",
|
|
51
|
+
"storageState": ".auth/user-default.json",
|
|
52
|
+
"mcpNamespace": null,
|
|
53
|
+
"runnerProject": "chromium",
|
|
54
|
+
"capabilities": []
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
|
|
45
59
|
"integrations": {
|
|
46
60
|
"playwright": {
|
|
47
61
|
"enabled": false,
|
|
@@ -69,7 +83,15 @@
|
|
|
69
83
|
"variableGroup": "{{ADO_VARIABLE_GROUP}}",
|
|
70
84
|
"pipelineFile": "qa/08-azure-integration/pipelines/azure-pipeline-qa.yml",
|
|
71
85
|
"moduleRegistry": "qa/08-azure-integration/module-registry.json",
|
|
72
|
-
"reporterPackage": "@alex_neo/playwright-azure-reporter"
|
|
86
|
+
"reporterPackage": "@alex_neo/playwright-azure-reporter",
|
|
87
|
+
"sprintCycle": {
|
|
88
|
+
"enabled": false,
|
|
89
|
+
"sprintDurationDays": 8,
|
|
90
|
+
"manualTestingTimeboxDays": 2,
|
|
91
|
+
"dateFormat": "dd-mm-aaaa",
|
|
92
|
+
"timezone": "America/Santiago",
|
|
93
|
+
"approvalThresholdPercent": 85
|
|
94
|
+
}
|
|
73
95
|
}
|
|
74
96
|
},
|
|
75
97
|
|