# Changelog All notable changes to `qa-framework` will be documented in this file. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). Versioning follows [Semantic Versioning](https://semver.org/). --- ## [1.11.0] - 2026-06-24 ### Added - **`templates/automation-scaffold/fixtures/base.ts`** — new fixture with TTL-aware session refresh. Replaces the plain `@playwright/test` import in long-running suites where the server-side session may expire before the suite finishes. - **`templates/automation-scaffold/global-setup.ts`** — hardened login flow: - `resolveVar()` with source logging (`param` / `env:KEY` / `default`) - Login retry loop (up to 3 attempts) with crash-page detection and recovery - `resolveAuthUsers()` — derives which users to authenticate from `QA_AUTH_USER` env var or from configured `storageState` paths in `playwright.config.ts` - `dismissOnboardingFlow()` — configurable via `QA_DISMISS_ONBOARDING_LABELS` (comma-separated button labels); no-op by default - Support for a second test user (`.auth/user-2.json`) via `QA_USER2_EMAIL` / `QA_USER2_PASSWORD` - **`templates/automation-scaffold/playwright.config.ts`** — exports `SESSION_TTL_MS` (default 2 h, overridable via `QA_SESSION_TTL_MS`); commented-out parallel 2-user variant (`chromium-user1` / `chromium-user2`). - **`templates/automation-scaffold/.env.example`** — new variables: `QA_SESSION_TTL_MS`, `QA_AUTH_USER`, `QA_USER2_EMAIL`, `QA_USER2_PASSWORD`, `QA_DISMISS_ONBOARDING_LABELS`, `PLAYWRIGHT_SERVICE_URL`. - **`templates/integration-scaffold/`** — new scaffold for API testing with Playwright `APIRequestContext`. Includes `package.json`, `playwright.config.ts`, `global-setup.ts` (token-based or browser-login auth), `tests/example.spec.ts`, `README.md`, `.env.example`. Deployed to `qa/07-automation/integration/` on `init` and `upgrade`. - **`templates/memory/`** — three semi-guided operational memory templates: `ci-pipeline-findings.md`, `e2e-stabilization-patterns.md`, `data-volatility-strategies.md`. Seeded into `qa/memory/` on `init` and `upgrade`. - **`qa/06-defects/disputed/`** — third defect state for cases where QA has evidence but the business or dev team disputes the expected behavior. Created on `init` and `upgrade`. - **`integrations/ado-powershell/pipelines/azure-pipeline-qa.yml`** — operational hardening: - `suiteFilter` pipeline parameter (default `all`); auto-overridden to `all` on scheduled runs - Bash array (`GREP_ARGS`) for safe grep pattern expansion with bracket characters - `PublishTestResults@2` scoped to exact XML path instead of `**/*.xml` - `publishRunAttachments: false` on both E2E and API stages - Artifact names suffixed with `$(System.JobAttempt)` to prevent collision on retries - `QA_AUTH_USER` documented as commented example for the 2-job parallel model - **`integrations/playwright/README.md`** — new section: Visual AI helper optional pattern. - **`templates/qa-readme.md`** — new fields: `ADO Project`, `Last Run` summary table, `Flaky Tests` inline annotation convention. ### Changed - **`scripts/init.js`** — `fixtures/base.ts` added to e2e scaffold copy list; integration scaffold replaces the `integration/README.md` placeholder; memory template files seeded from `templates/memory/` via `fs.readFileSync`. - **`scripts/upgrade.js`** — integration scaffold, `disputed/` defect folder, and memory templates are all seeded idempotently on upgrade for existing projects. - **`docs/folder-structure-guide.md`** — `06-defects/` updated to document `disputed/`. - **`templates/defect-report.md`** — `Status` field extended with `Disputed` value. - **`qa/memory/INDEX.md`** template updated to pre-populate rows for the three new memory template files. --- ## [1.10.0] - 2026-05-19 ### Added - **`integrations/ado-powershell/pipelines/azure-pipeline-qa.yml`** — pipeline template significantly expanded: - New **Stage 3: API Integration Tests** — separate stage for `qa/07-automation/integration`, with its own `PublishTestResults` and `PublishPipelineArtifact` tasks. - **Cross-project repository checkout** via `resources.repositories` block; each stage now performs an explicit `checkout: source`. - **Smoke test step** in the E2E stage — validates `QA_BASE_URL` is reachable via `curl` before running the suite. - **Commented placeholder** for `AzureCLI@2` login task (Playwright Workspaces / Entra ID) in both E2E and API stages, with `PLAYWRIGHT_SERVICE_URL` env var placeholder. - Optional nightly schedule block (commented out). - `PublishPipelineArtifact` tasks for HTML report and trace artifacts in both stages. - **`integrations/playwright-azure-reporter/README.md`** — fully rewritten: - Variables split into local (PAT) vs CI/CD (`SYSTEM_ACCESSTOKEN`) sections. - Config snippet updated to use `ADO_ORG`, `ADO_PROJECT`, `orgUrl` constructed from `ADO_ORG`, and `SYSTEM_ACCESSTOKEN ?? AZURE_TOKEN` token fallback. - New **Playwright Workspaces reporter** section (`@azure/playwright` + `playwright.service.config.ts` + Entra ID authentication notes). - Troubleshooting table expanded with pipeline-specific `401` scenario. ### Changed - **`azure-pipeline-qa.yml`** — variable names aligned with current conventions: `AZURE_TOKEN` / `ADO_ORG_URL` / `ADO_PROJECT_NAME` replaced by `ADO_ORG` / `ADO_PROJECT`; `ADO_PLAN_ID` split into `ADO_E2E_PLAN_ID` / `ADO_API_PLAN_ID`; `SYSTEM_ACCESSTOKEN` replaces PAT for ADO reporter authentication. - **`azure-pipeline-qa.yml`** — E2E job `timeoutInMinutes` increased from 60 to 90. - **`azure-pipeline-qa.yml`** — trigger reduced to `main` only (removed `qa` and `release/*` branches); trigger rationale documented in comments. - **`azure-pipeline-qa.yml`** — E2E test run consolidated from two `@grep`-tag steps (P0 + P1/P2) into a single `--grep-invert "_inspect|_diag"` run with `continueOnError: true`. - **`azure-pipeline-qa.yml`** — cache target changed from `~/.cache/ms-playwright` to `node_modules` per workspace; `cacheHitVar` added to both cache tasks. - **`azure-pipeline-qa.yml`** — `pool` block moved above `variables` for readability; `ADO_SYNC_DISABLED` variable removed. --- ## [1.9.1] - 2026-05-15 ### Added - **`integrations/ado-powershell/scripts/md-to-tc-mapping.ps1`** — new script that parses a Plan-de-Pruebas markdown file and generates `tc-mapping.json`. Reads the Tabla de Pruebas table, detects columns dynamically, skips Bloqueado rows (PENDING-CODE), splits steps by `
`, and strips leading numbering. Supports a `-TableSection` parameter for plans with non-standard headings. This was previously missing from the framework, forcing agents to implement ad-hoc parsers in each project. ### Fixed - **`create-testplan-from-mapping.ps1`** — removed Unicode characters that caused `MissingArrayIndexExpression` parser errors in PowerShell 5.1. - **`create-testplan-from-mapping.ps1`** — added auto-load of `ado-powershell` skill when `New-AdoTestCase` is not yet in scope; script no longer requires manual dot-sourcing before invocation. - **`create-testplan-from-mapping.ps1`** — added fallback to `$mapping.items` when `$mapping.testCases` is absent, for compatibility with mappings generated by older sessions. - **`inject-ado-ids.ps1`** — fixed broken regex (`\Q...\E` is not valid PowerShell); replaced with `[regex]::Escape()`. Added `-AdonIdsDir` parameter to process all `ado-ids-*.json` files in a directory in one pass. Added `-DryRun` switch. Fixed UTF-8 encoding on write. --- ## [1.9.0] - 2026-05-15 ### Changed - **`create-testplan-from-mapping.ps1` refactored** — removed all ADO-specific logic (auth headers, `Invoke-RestMethod` calls, XML step construction). The script now delegates to `New-AdoTestCase` and `Add-AdoTestCaseToSuite` from `@keber/ado-powershell`, keeping `qa-framework` free of ADO implementation details. Requires `@keber/ado-powershell` ≥ 1.3.0. - **Script parameters simplified** — `-OrgUrl`, `-ProjectName`, and `-Token` removed from `create-testplan-from-mapping.ps1`. Caller is responsible for loading the ADO session via `. .github/skills/ado-powershell/load.ps1` before invoking the script. - **`tc-mapping.json` schema extended** — added optional `steps` (string array) and `expectedResult` (string) fields per test case. When present, steps are sent to ADO as `Microsoft.VSTS.TCM.Steps`; all steps except the last are `ActionStep`, the last is `ValidateStep` with `expectedResult`. - **`qa-ado-integration` SKILL.md updated** — Step 3 now specifies exactly how to parse the Tabla de Pruebas columns (`Steps` split on `
`, strip numbering prefix) to produce `tc-mapping.json` with steps. ### Added - **Guard in `create-testplan-from-mapping.ps1`** — fails fast with a clear message if `New-AdoTestCase` is not available (ADO session not loaded). ### Requires - `@keber/ado-powershell` ≥ **1.3.0** — adds `$ExpectedResult` parameter to `New-AdoTestCase` and `ValidateStep` support in the generated TCM steps XML. --- ## [1.8.0] - 2026-05-07 ### Changed - **Pipeline Stage 3 now produces "Plan de Pruebas"** — a single document per sprint+module that combines test plan context (scope, strategy, preconditions, test data) with a full TC table including numbered steps and expected results. Replaces the previous split between a high-level plan and separate TC-{ID}.md files for most workflows. - **Stage 4 (`qa-test-cases`) role redefined** — from "generate TC-{ID}.md files" to "expand steps in Plan de Pruebas table when Stage 3 produced summary-level steps". Standalone `TC-{ID}.md` files are now optional and used only for complex/reusable TCs. - **ADO integration prerequisite updated** — `qa-ado-integration` now reads from `Plan-de-Pruebas-{proyecto}-Sprint-{N}-{modulo}.md` (Tabla de Pruebas) instead of `qa/03-test-cases/automated/`. Each module file → one ADO Test Suite; each table row → one ADO Test Case with steps. - **`02-test-plans/` restructured** — from flat `automated/` and `manual/` subdirectories to `sprints/Sprint-{N}/` per-sprint structure. Both tracks share the same Plan de Pruebas document. ### Added - **`templates/test-plan-sprint.md`** — new primary Plan de Pruebas template. Includes header, 12 sections, and Tabla de Pruebas with column guide. Uses `{{PLACEHOLDERS}}` throughout. - **`skills/qa-test-plan/references/plan-de-pruebas-template.md`** — full template with example table rows, steps writing conventions, priority decision tree, and automation feasibility rules. Replaces `references/priority-and-feasibility.md` (old file kept for reference, now legacy). - **`upgrade` Section 6** — non-destructive migration of old `02-test-plans/` structure: moves `automated/` → `sprints/legacy-automated/`, `manual/` → `sprints/legacy-manual/`, and flat `.md` plan files → `sprints/legacy/`. Creates `03-test-cases/README.md` if missing. ### Deprecated - **`templates/test-plan.md`** — use `templates/test-plan-sprint.md` instead. Old file kept for reference; contains deprecation notice at top. - **`02-test-plans/automated/` and `02-test-plans/manual/` subdirectory convention** — replaced by `02-test-plans/sprints/Sprint-{N}/` per-sprint structure. ### Migration Run `npx qa-framework upgrade`. Section 6 of the upgrade script handles the `02-test-plans/` migration non-destructively: existing plan files are moved, not deleted. --- ## [1.7.2] - 2026-05-06 ### Fixed - **`init` no longer overwrites `qa/AGENT-NEXT-STEPS.md`** on already-initialized projects. The file was written with a bare `fs.writeFileSync` (no existence check), causing active sprint checklists to be silently replaced. Changed to `writeIfMissing` — consistent with all other project-owned files. --- ## [1.7.1] - 2026-05-06 ### Fixed - **Agent instructions template extracted** — `templates/qa-framework.instructions.md` is now the single source of truth for QA agent rules. Both `init` and `upgrade` read and interpolate this file instead of maintaining separate hardcoded strings, eliminating the rule divergence that caused `upgrade` to deploy only 7 rules instead of 11. - `upgrade.js` — removed `buildCopilotInstructions()` function (dead code after template extraction). --- ## [1.7.0] - 2026-05-06 ### Changed - **Agent instructions moved to `.github/instructions/qa-framework.instructions.md`** — the framework no longer writes to `.github/copilot-instructions.md`. The new file is a VS Code `*.instructions.md` file with `applyTo: '**'` frontmatter, which Copilot loads automatically. This eliminates the conflict between framework-owned rules and project-owned custom instructions: both files coexist independently and the framework file is freely upgradeable. ### Added - **`upgrade` step 2b — automatic migration of old `copilot-instructions.md`**: - If the file contains only QA Framework content (any previous version) → the file is deleted. - If the file contains custom instructions and a QA Framework section → the QA section is stripped and the custom content is preserved. - If the file contains no QA Framework content → the file is left untouched. The detection marker is the heading `# QA Framework Instructions`, consistent across all versions. ### Migration Run `npx qa-framework upgrade`. No manual steps required. See `MIGRATION-NOTES.md` — section "Upgrading from a version that used `.github/copilot-instructions.md`". --- ## [1.6.2] - 2026-05-05 ### Added - **`tests/helpers/debug/`** — diagnostic scripts directory created by `init` and `upgrade` inside `07-automation/e2e/tests/`. Scripts here are excluded from test runs via `testIgnore`. - **`tests/seeds/`** — data seeding specs directory created by `init` and `upgrade` inside `07-automation/e2e/tests/`. Excluded from test runs via `testIgnore`. - **`testIgnore`** in `playwright.config.ts` template — excludes `**/helpers/debug/**` and `**/seeds/**` from Playwright test discovery. - **`upgrade` step 5e** — patches existing `playwright.config.ts` in `e2e/`: replaces `testDir: '.'` with `'./tests'`, injects `testIgnore` if missing, creates `helpers/debug/` and `seeds/` if absent. - **Dual-Track Pipeline** section in `docs/folder-structure-guide.md` and `qa/QA-STRUCTURE-GUIDE.md` — documents the automation track and manual track as parallel paths sharing `01-specifications/` as source of truth. Includes entry point table (3 scenarios) and track selection guidance. Clarifies that `03-test-cases/` is the manual track artifact and `04-test-data/` is optional. ### Fixed - `qa/QA-STRUCTURE-GUIDE.md` — removed stale reference to deleted `docs/generalization-decisions.md` from the `06-defects/` section. - `README.md` — pipeline table updated with Track column; `03-test-cases/` and `04-test-data/` annotated as manual-track / optional in the directory tree. --- ## [1.6.0] - 2026-04-29 ### Changed (breaking - automated by `upgrade`) - **`07-automation/` restructured**: the Playwright project root moves from `07-automation/` to `07-automation/e2e/`. Affected files: `playwright.config.ts`, `global-setup.ts`, `package.json`, `.env.example`, `fixtures/`. Spec stubs move from `07-automation/e2e/{module}/` to `07-automation/e2e/tests/{module}/`. Run `npx qa-framework upgrade` to migrate automatically. - `testDir` in `playwright.config.ts` template is now `'./tests'` (was `'.'`). - `QA_DIR` in the Azure Pipeline template now points to `qa/07-automation/e2e` (was `qa/07-automation`). - CI commands: `cd qa/07-automation/e2e && npm install && npx playwright install chromium`. ### Removed - `agent-instructions/` directory (legacy monolithic per-task instruction files) — superseded by `skills/` architecture since v1.5.0. All behavior is now in `skills/*/SKILL.md` + `references/`. - `docs/comparison-matrix.md` — superseded by `docs/skills-architecture.md`. - `docs/generalization-decisions.md` — internal design notes; no longer relevant. ### Documentation - `docs/architecture.md` — updated for v1.6.0: correct 07-automation/e2e/ tree, removed blazor-radzen stub, added `.github/skills/` and `memory/` to target project box. - `docs/installation.md` — rewritten: correct `npm install` command, no interactive prompts, correct directory tree with e2e/integration/load, added `upgrade` command section. - `docs/usage-with-agent.md` — rewritten: all `00-guides/` references replaced with `.github/skills/`, session workflows updated to reflect skills model, DO/DON'T list corrected (e2e/ is now correct run location). - `README.md` — version bumped, `agent-instructions/` entry removed from package tree. ### Added - `07-automation/integration/` — placeholder for API/integration tests (k6, JMeter, Azure Load Testing); created on `init` and `upgrade`. - `07-automation/load/` — placeholder for load and performance tests; created on `init` and `upgrade`. - **`scripts/upgrade.js` migration section 5** — detects old v1.5.x structure and relocates all affected files non-destructively (moves only when destination does not exist; warns on conflict). - **Stage 5b - Test Stabilization** (`skills/qa-test-stabilization/`) — skill for exhaustively reviewing and stabilizing generated Playwright tests before ADO integration. Covers baseline collection, failure classification (9 categories), false-positive validation, confidence scoring (>=90% exit threshold), `STABILIZATION-REPORT.md` schema, and upstream artifact update rules. ### Planned - `qa-framework generate spec ` — scaffold a full spec set from CLI - `qa-framework validate` — check `qa/` structure for compliance with conventions - Integration: `jest` support alongside Playwright - Integration: GitHub Actions pipeline template (alongside existing Azure Pipelines template) --- ## [1.0.0] - 2026-03-04 ### Added - **Framework scaffold** — initial `qa/` directory tree with 9 numbered folders (00–08) - **6-file submodule template set** — `00-inventory` through `05-test-scenarios` - **Agent instructions** — 7 purpose-specific Markdown instruction files for IDE agents - **Standards** — naming conventions, bug report template, test case template, test data guidelines - **Automation scaffold** — generalized Playwright `playwright.config.ts`, `global-setup.ts`, `.env.example`, `fixtures/auth.ts` - **Optional integrations** — stubs and READMEs for Playwright, `playwright-azure-reporter`, and ADO PowerShell - **CLI entry point** — `qa-framework init`, `generate`, `validate` commands - **Documentation** — architecture, comparison matrix, generalization decisions, installation guide, usage-with-agent guide, spec-driven philosophy, folder structure guide - **Migration notes** — `MIGRATION-NOTES.md` for projects moving from embedded to package-based framework ---