@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.
Files changed (109) hide show
  1. package/CHANGELOG.md +340 -0
  2. package/README.md +42 -2
  3. package/docs/architecture.md +30 -26
  4. package/docs/decisions/lane-heartbeat-caller.md +86 -0
  5. package/docs/final-report.md +23 -23
  6. package/docs/folder-structure-guide.md +100 -80
  7. package/docs/installation.md +42 -7
  8. package/docs/skills-architecture.md +23 -23
  9. package/docs/spec-driven-philosophy.md +9 -9
  10. package/docs/usage-with-agent.md +88 -9
  11. package/docs/visuals/diag-01-ejecutivo-1.png +0 -0
  12. package/docs/visuals/diag-02-tactico-1.png +0 -0
  13. package/docs/visuals/diag-03-tecnico-1.png +0 -0
  14. package/docs/visuals/info-01-ejecutivo-1.png +0 -0
  15. package/docs/visuals/info-02-tactico-1.png +0 -0
  16. package/docs/visuals/info-03-tecnico-1.png +0 -0
  17. package/docs/visuals/pres-01-ejecutivo-1.png +0 -0
  18. package/docs/visuals/pres-02-tactico-1.png +0 -0
  19. package/docs/visuals/pres-03-tecnico-1.png +0 -0
  20. package/docs/visuals/qa-01-problema-1.png +0 -0
  21. package/docs/visuals/qa-02-que-es-1.png +0 -0
  22. package/docs/visuals/qa-03-pipeline-1.png +0 -0
  23. package/docs/visuals/qa-04-6-archivos-1.png +0 -0
  24. package/docs/visuals/qa-05-humano-1.png +0 -0
  25. package/docs/visuals/qa-06-agente-1.png +0 -0
  26. package/docs/visuals/qa-07-skills-arch-1.png +0 -0
  27. package/docs/visuals/qa-08-traceability-1.png +0 -0
  28. package/docs/visuals/qa-en-01-problem-1.png +0 -0
  29. package/docs/visuals/qa-en-02-what-is-1.png +0 -0
  30. package/docs/visuals/qa-en-03-pipeline-1.png +0 -0
  31. package/docs/visuals/qa-en-04-6files-1.png +0 -0
  32. package/docs/visuals/qa-en-05-human-1.png +0 -0
  33. package/docs/visuals/qa-en-06-agent-1.png +0 -0
  34. package/docs/visuals/qa-en-07-skills-arch-1.png +0 -0
  35. package/docs/visuals/qa-en-08-traceability-1.png +0 -0
  36. package/examples/module-example/suppliers/00-inventory.md +1 -1
  37. package/examples/module-example/suppliers/suppliers-create.spec.ts +8 -8
  38. package/integrations/ado-powershell/README.md +1 -1
  39. package/integrations/ado-powershell/scripts/sync-ado-titles.ps1 +2 -2
  40. package/integrations/playwright/README.md +4 -4
  41. package/package.json +7 -3
  42. package/qa-framework.config.json +25 -3
  43. package/scripts/check-forbidden-chars.js +187 -0
  44. package/scripts/check-spanish-accents.js +159 -0
  45. package/scripts/cli.js +1 -1
  46. package/scripts/generate.js +2 -2
  47. package/scripts/init.js +101 -12
  48. package/scripts/lib/claude-agents.js +347 -0
  49. package/scripts/lib/claude-commands.js +56 -0
  50. package/scripts/lib/module-keys.js +54 -0
  51. package/scripts/sync-version.js +63 -0
  52. package/scripts/upgrade.js +369 -20
  53. package/scripts/validate.js +46 -21
  54. package/skills/qa-ado-integration/SKILL.md +19 -19
  55. package/skills/qa-ado-integration/references/scripts-and-config.md +6 -6
  56. package/skills/qa-automation/SKILL.md +49 -27
  57. package/skills/qa-automation/references/config-checklist.md +4 -4
  58. package/skills/qa-automation/references/dom-inspection-template.js +7 -7
  59. package/skills/qa-automation/references/patterns.md +20 -20
  60. package/skills/qa-automation/references/pom-template.md +161 -0
  61. package/skills/qa-maintenance/SKILL.md +11 -11
  62. package/skills/qa-maintenance/references/update-rules.md +8 -8
  63. package/skills/qa-module-analysis/SKILL.md +20 -19
  64. package/skills/qa-module-analysis/references/exploration-checklist.md +4 -4
  65. package/skills/qa-module-analysis/references/output-verification.md +69 -0
  66. package/skills/qa-module-analysis/references/spec-file-formats.md +14 -14
  67. package/skills/qa-spec-generation/SKILL.md +13 -7
  68. package/skills/qa-test-cases/SKILL.md +11 -81
  69. package/skills/qa-test-cases/references/test-case-template.md +5 -5
  70. package/skills/qa-test-plan/SKILL.md +22 -86
  71. package/skills/qa-test-plan/references/plan-de-pruebas-template.md +24 -24
  72. package/skills/qa-test-stabilization/SKILL.md +59 -30
  73. package/skills/qa-test-stabilization/references/classification-protocol.md +35 -35
  74. package/templates/agent-next-steps.md +10 -10
  75. package/templates/agents/qa-analisis.md +142 -0
  76. package/templates/agents/qa-asesoria.md +48 -0
  77. package/templates/agents/qa-informe-resultados.md +236 -0
  78. package/templates/agents/qa-investigador.md +143 -0
  79. package/templates/agents/qa-plan.md +131 -0
  80. package/templates/agents/qa-reporte-ejecucion.md +138 -0
  81. package/templates/automation-scaffold/.env.example +36 -6
  82. package/templates/automation-scaffold/fixtures/auth.ts +27 -5
  83. package/templates/automation-scaffold/fixtures/base.ts +23 -1
  84. package/templates/automation-scaffold/fixtures/test-helpers.ts +1 -1
  85. package/templates/automation-scaffold/global-setup.ts +117 -48
  86. package/templates/automation-scaffold/playwright.config.ts +72 -32
  87. package/templates/automation-scaffold/scripts/global-setup-guards.js +184 -0
  88. package/templates/automation-scaffold/scripts/lane-config.js +269 -0
  89. package/templates/automation-scaffold/scripts/lane-lock.js +589 -0
  90. package/templates/defect-report.md +17 -3
  91. package/templates/execution-report.md +9 -9
  92. package/templates/integration-scaffold/.env.example +1 -1
  93. package/templates/integration-scaffold/global-setup.ts +21 -1
  94. package/templates/integration-scaffold/playwright.config.ts +15 -1
  95. package/templates/qa-framework.instructions.md +9 -8
  96. package/templates/qa-framework.rules.md +53 -0
  97. package/templates/qa-readme.md +8 -8
  98. package/templates/session-summary.md +2 -2
  99. package/templates/specification/00-inventory.md +3 -3
  100. package/templates/specification/01-business-rules.md +6 -6
  101. package/templates/specification/02-workflows.md +1 -1
  102. package/templates/specification/03-roles-permissions.md +1 -1
  103. package/templates/specification/04-test-data.md +8 -8
  104. package/templates/specification/05-test-scenarios.md +5 -5
  105. package/templates/test-case.md +3 -3
  106. package/templates/test-data-guidelines.md +7 -7
  107. package/templates/test-plan-sprint.md +13 -13
  108. package/templates/test-plan.md +3 -3
  109. 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 — 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 |
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** — it defines which stage comes before which, and what the prerequisite is. Skills are the implementation of each stage.
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 — priority + feasibility rules | `priority-and-feasibility.md` (includes full template) |
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` |
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
- → copies to →
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` — 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.
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 → steps → rules → outputs
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 → ~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
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 — Core Philosophy
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 → Automation comes second
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 — 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 |
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 → 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
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
@@ -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
- This framework is designed so that an IDE agent (such as GitHub Copilot in VS Code) can:
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 — Workspace instructions file (recommended)
49
+ ### Option A - Workspace instructions file (recommended)
48
50
 
49
- `init` generates `.github/copilot-instructions.md` automatically. It contains the full
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 — Reference skills directly in the agent conversation
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 — Individual task prompts
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 copilot-instructions.md)
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/copilot-instructions.md` rule 0). For additional context:
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
@@ -1,4 +1,4 @@
1
- # Suppliers — Inventory
1
+ # Suppliers - Inventory
2
2
 
3
3
  **Module**: Suppliers (SUP)
4
4
  **Submodule**: Create / Edit / List
@@ -15,16 +15,16 @@
15
15
 
16
16
  import { test, expect } from '@playwright/test';
17
17
 
18
- // EXEC_IDX: unique per minute-window — prevents data collisions between runs
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 — happy path @P0
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 — happy path @P0', async ({ page }) => {
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 — required fields validation @P0
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 — required fields validation @P0', async ({ page }) => {
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 — duplicate RUT rejected @P0
82
+ * [TC-SUP-CR-003] Create supplier - duplicate RUT rejected @P0
83
83
  *
84
- * NOTE: test.skip active — DEF-001: Duplicate RUT check not enforced server-side.
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 — duplicate RUT rejected @P0', async ({ page }) => {
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
  );
@@ -1,4 +1,4 @@
1
- # Integration — ADO PowerShell Scripts
1
+ # Integration - ADO PowerShell Scripts
2
2
 
3
3
  PowerShell scripts for Azure DevOps Test Plan management.
4
4
  All scripts are parameterized and project-agnostic.
@@ -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) — skipping WI $adoId"
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 → $newTitle"
87
+ Write-Host " [SYNCED] WI #$adoId -> $newTitle"
88
88
  $synced++
89
89
  }
90
90
  }
@@ -1,4 +1,4 @@
1
- # Integration — Playwright
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` — step through in inspector
44
- 2. `--headed` — watch the browser
45
- 3. `--trace on` — record full trace; open with `npx playwright show-trace`
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.11.3",
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": ">=18"
43
+ "node": ">=20"
40
44
  },
41
45
  "peerDependencies": {
42
46
  "@keber/ado-qa": ">=1.0.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./qa-framework.config.schema.json",
3
- "frameworkVersion": "1.10.0",
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