0.4.1
Added
- Shared page-object and fixture repairs in Selenium Java and pytest suites are validated across the tests they affect, end to end. A suite kept in a subdirectory of the repository is validated from its own build root, and a pytest module that names fixtures in literal
usefixturesmarks has those fixtures followed.
Changed
- Diagnosis of a Selenium Java run also searches recent changes for the expected and received values of TestNG and JUnit assertions.
- A page object's own locators are kept in the evidence, and recent changes are searched for the text they select.
- When many tests fail through one shared page object, the request carries each source excerpt once and keeps the page object's methods and locators within its size limit.
Fixed
- A repair to shared test support is no longer refused because a module that none of its affected tests reach has imports that KwikQA can't bound or parse, such as build tooling with dynamic imports.
- Java sources in a Maven or Gradle suite two levels below the workspace root are found, so their failures reach the evidence.
- Change evidence no longer dates commits against a run whose report doesn't record its start, such as a Maven Surefire report. The search takes the last commits instead.
0.4.0
Added
kwikqa checkchecks test changes that KwikQA didn't write, such as an agent's edits or Playwright's healer's. It applies the same gates as KwikQA's own repairs: scope and policy, ownership from an earlieranalyzeof the failing run, and validation. It asks before running tests (--yesapproves), exits 0 only when every gate passes, and sends nothing to KwikQA. In CI, it publishes its verdict wherekwikqa cipublishes its summary.- Selenium Java suites (Maven or Gradle, with TestNG or JUnit 5), pytest suites (with Selenium or Playwright), and Cucumber-JVM suites (Maven or Gradle) are diagnosed, repaired, and validated with the project's own Maven, Gradle, or pytest. The diagnosis reads their page objects, base classes, step definitions, and pytest fixtures. Maven and Gradle validation is unavailable on Windows. KwikQA never installs or downloads these tools.
- Bring-your-own-key endpoints:
KWIKQA_ENDPOINTchooses where a BYOK plan's requests go:openrouter(the default),anthropic,openai,azure-openai,bedrock, orgithub-models. Credentials come from the environment, so a CI job sets them from its own secrets. For a direct endpoint, its model key (such asANTHROPIC_API_KEY) is removed from the environment of the test runs KwikQA starts. - More than one fix pull request per CI run:
ci.fix.maxPullRequestsPerRun(1 to 5, default 1) repairs up to that many failure groups and opens a draft pull request for each one that validates. The plan sets the most: 5 on Enterprise, 1 on Pro and the team plans. - Shard-aware deduplication on Enterprise plans: each job of a sharded run asks the service which of its failure groups another job of the same run already diagnoses, and skips those. Set
KWIKQA_SHARDwhere a job's own ID isn't unique per shard.
Changed
- Repairs to shared test support, such as a page object, fixture, helper, or config file, are validated over every test that uses them instead of being refused. Before the patch is applied, those tests run once on the current code, after you approve. Afterward, each must pass again: three times in a row in Playwright, Cypress, and WebdriverIO runs, and once in Maven, Gradle, and pytest runs.
fixandcheckrefuseexpect(...).toPass()as a retry. An exact expected value may be replaced by a pattern, such as a regular expression orexpect.any, only with cited evidence that the value varies.- CI use follows the plan. On Hobby,
kwikqa cianalyzes CI runs locally and says why. Pro and BYOK run hosted analysis in CI on one repository of your own. Organization CI,ci.fixbeyond that repository, and Slack and Teams alerts need a team plan. - Each request in CI that counts toward your plan also reports where the job runs: the CI system, the repository's host, owner, and name, its visibility when known, and the pull request author's login. The service keeps the repository and the author only as keyed hashes.
- The plans are Hobby (the free plan), Pro, BYOK, Teams, BYOK Teams, Enterprise, and BYOK Enterprise. Until the paid plans open, every account uses Hobby. Prices and limits are in the Plans section of the README.
0.3.1
Fixed
- A fix pull request's title names the kind of failure when its group has no symptom category, such as "a failure on a locator" or "a failed network request". It counts the failing tests when there are several.
0.3.0
Release candidates 0.3.0-rc.1 and 0.3.0-rc.2 were published to npm's next tag first. The notes below cover all three.
Added
- Fix pull requests in CI. With a committed
ci.fixpolicy ({"ci": {"fix": {"pullRequests": "draft"}}}inkwikqa.config.json),kwikqa fixin GitHub Actions, Azure Pipelines, or GitLab CI/CD repairs a failure on the runner, validates the repair, and opens a draft pull request labeledkwikqa. On GitLab it is a draft merge request. A person reviews and merges it. GitHub needs "Allow GitHub Actions to create and approve pull requests" turned on. Jenkins still needs a terminal forfix. - One fix per failure group. While the group's fix pull request is open, a later run of the same failure asks for no repair and updates one note on that pull request.
- For a fork's pull request,
fixis refused before any request is sent, and the job summary says what a maintainer can run.
0.2.5
Added
- Jenkins:
kwikqa ciprints its summary in the build's console log, with a link to the build, and comments on a GitHub or GitLab pull request through that host's token. A rebuild updates the comment. Bitbucket gets no comment yet.
Fixed
- A refused GitLab note names the permissions a fine-grained
GITLAB_TOKENneeds (Work Item read, create, and update on the project), as well as theapiscope.
0.2.4
Added
- GitLab CI/CD:
kwikqa ciprints its summary in the job log and posts one merge request note, which a re-run updates. It needsKWIKQA_TOKENand aGITLAB_TOKENof your own, stored as masked variables, becauseCI_JOB_TOKENcan't write notes. A branch pipeline gets a note only when its branch has exactly one open merge request.
Changed
- When a CI run finds a repairable failure, the hint says to run
kwikqa analyzeand thenkwikqa fixon your machine, becausefixneeds a terminal.
Fixed
- On Azure Pipelines, a refused pull request comment names the identity that Azure DevOps refused, which is the identity to give the "Contribute to pull requests" permission.
0.2.3
Added
- Azure Pipelines:
kwikqa cipublishes its summary as a build summary and, on an Azure Repos pull request, as one pull request thread that a re-run updates. The thread is created closed, so it never holds up a pull request under a comment-resolution policy. The build service needs "Contribute to pull requests" on the repository.
0.2.2
Fixed
- A Slack message is sent as one rich-text block, so each of its lines stays a line when it is copied.
0.2.1
Fixed
- A hosted analysis no longer fails when a status check's response is cut short. The check is retried.
- The branch line of a Slack or Teams message no longer repeats the repository, which the headline names.
0.2.0
Added
- Failure report:
kwikqa analyze --htmlorkwikqa reportwriteskwikqa-report.html, a self-contained page with each failure group and its owner, the diagnosis and the evidence it cites, flaky tests, and every request sent. It is free on every plan and needs no sign-in. - More test reports:
analyzereads JUnit XML from any tool (Vitest, Jest, Mocha, pytest, Playwright's JUnit reporter, Maven Surefire and Failsafe, and Gradle), TestNG's XML, Allure results, CTRF reports, and Cucumber JSON. It diagnoses their failures. These runs are not repaired or validated, andfixsays so before it sends anything. kwikqa cianalyzes a failed CI run and publishes a summary. On GitHub Actions the summary is the job summary plus one pull request comment, which a re-run updates. Without a KwikQA token it analyzes locally. On other CI systems it writes the report and posts to chat.kwikqa ciposts to Slack and Microsoft Teams through incoming webhook URLs stored as CI secrets. It posts only when tests fail, unless--notify alwaysis given.
0.1.1
Added
- Tests in a monorepo package can be repaired and validated. Run
kwikqafrom the package folder that holds the tests. KwikQA finds that package's Playwright, Cypress, or WebdriverIO in its ownnode_modulesor in one above it, up to the repository root. It never runs a copy from outside the repository.
Changed
- The commands KwikQA suggests use the package manager that ran it:
npx,pnpm exec,yarn, orbunx.
Fixed
- A read from the KwikQA service that loses its connection is tried once more. Writes are never retried, and a failed request names its network cause.
0.1.0
Added
kwikqa analyzediagnoses failed Playwright Test, Cypress, and WebdriverIO runs. Each cause cites the report fields, trace events, or source lines that support it, and KwikQA says so when the evidence isn't enough. Each group of failures gets its own diagnosis request.kwikqa analyze --capturere-runs the failing tests to record full evidence: Playwright traces, and for Cypress and WebdriverIO, each failed attempt's DOM, command log, console, and network. With Playwright 1.59 or later and Playwright CLI installed, it also probes locator failures.kwikqa analyze --reportreads Playwright's JSON report, KwikQA's Cypress and WebdriverIO reporters, mochawesome, and JUnit reports.kwikqa fixproposes a repair to test code only: specs, page objects, fixtures, and helpers thatkwikqa.config.jsonallows. It shows the diff and applies it only after you approve.kwikqa validateruns the repaired test three times in a row with retries off, and a failure rolls the patch back. KwikQA runs your project's own tools and never installs packages or browsers.- Repairs refuse to weaken a test: no skipped or focused tests, fixed waits, retries, forced Cypress actions, or removed or swapped assertions.
- Recent code changes that mention the failure are sent with its evidence, so a deliberate change can be told apart from a broken app.
--no-changesleaves them out. - Hosted analysis through the KwikQA service. Sign in with
kwikqa login(GitHub). Hosted requests go only to endpoints with a zero-data-retention policy. While the paid plans are coming soon, every account uses the free plan. - Bring your own key: the BYOK plans, when they open, send requests straight to OpenRouter with your
OPENROUTER_API_KEY, so the evidence never passes through KwikQA's servers. - Team insights: on the team plans, when they open, the owner can turn on sharing of the names, files, and projects of failing and flaky tests, and of each fix's outcome. Evidence, source, diffs, and error messages are never shared.
- Account and setup commands:
init,login,logout,status,upgrade, andbilling.analyze --yesruns unattended in CI with a CI token inKWIKQA_TOKEN.