<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: nexus studio</title>
    <description>The latest articles on DEV Community by nexus studio (@nexus_studioqa).</description>
    <link>https://dev.to/nexus_studioqa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4189847%2F33a71349-6a6c-4948-b32f-967663dc5a51.png</url>
      <title>DEV Community: nexus studio</title>
      <link>https://dev.to/nexus_studioqa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nexus_studioqa"/>
    <language>en</language>
    <item>
      <title>Is this test flaky, or is it a real bug?</title>
      <dc:creator>nexus studio</dc:creator>
      <pubDate>Sat, 17 Oct 2026 15:49:26 +0000</pubDate>
      <link>https://dev.to/nexus_studioqa/is-this-test-flaky-or-is-it-a-real-bug-25jf</link>
      <guid>https://dev.to/nexus_studioqa/is-this-test-flaky-or-is-it-a-real-bug-25jf</guid>
      <description>&lt;p&gt;A flaky test failed and then passed on a retry without anyone fixing anything, and a real bug fails for a reason no retry changes. Nexus Studio, by Verdict System LLC, tells them apart by recording every retry: FLAKY for a failure that a retry passed, BREACHED for a real finding, and BREACHED_FLAKY for a failure that is itself inconsistent. A retry never turns a defect into a green run.&lt;/p&gt;

&lt;p&gt;By the Nexus Studio team, Verdict System LLC. October 7, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a flaky test?
&lt;/h2&gt;

&lt;p&gt;A flaky test is one whose attempts disagree: it fails once and passes on another try, with the code and the test unchanged. In Nexus Studio the word has one meaning. FLAKY is a test that failed, then passed on a retry, with nothing healed. Something is unstable, in the application or in the test, and nothing was fixed.&lt;/p&gt;

&lt;p&gt;A hard failure that happens on every attempt is not flaky, even when the self-healing step tried and failed to repair a selector. An earlier version of the engine filed that case as FLAKY. Teams read FLAKY as "the test is bad" and move on, so a broken application shipped as noise. The engine no longer does that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do retries hide real bugs?
&lt;/h2&gt;

&lt;p&gt;They can, and the reason is the number of states. With pass and fail only, a retry that passes turns a red run green, and an intermittent defect in the application becomes invisible. That is one of the most expensive kinds of bug to find. When red can also mean a blinked network or a dead browser, the team learns to rerun reds instead of reading them, and the suite loses trust.&lt;/p&gt;

&lt;p&gt;Nexus Studio keeps the retry visible. A test that failed and then passed is not SECURE. It exits 0 in CI, so it does not break the build, but it shows in the report and in History as FLAKY, a pass with a reservation. See &lt;a href="https://sentinel-nexusstudio.com/docs/verdicts" rel="noopener noreferrer"&gt;how the 14 verdicts are decided&lt;/a&gt; for the full order of checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the difference between FLAKY, BREACHED and BREACHED_FLAKY?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;FLAKY&lt;/strong&gt;: failed, then a retry passed it, and nothing was repaired. Read the failed attempt's raw-data.json, then the History trend. It exits 0.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BREACHED&lt;/strong&gt;: the test failed on a single attempt, and no environment or harness pattern explains the error. An assertion failed. This is the bug report, and it exits 1.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BREACHED_FLAKY&lt;/strong&gt;: the test failed on its last attempt after an earlier retry, and no environment or harness pattern explains it. The failure itself is inconsistent. Compare the attempts before you file a bug. It exits 1.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two neighbors keep the picture honest. AUTO_RECOVER is a pass where self-healing replaced a selector, so the author's locator is dead and the test is not clean. A first attempt that failed only on time and then passed on retry is SECURE, because that shows latency, not instability.&lt;/p&gt;

&lt;p&gt;Before a failure can be BREACHED or BREACHED_FLAKY, the classifier rules out the other explanations in a fixed order: a harness error, a crash, a block, an unreachable host and a timeout. Only a failure that none of those explains is a finding. That is why a timeout or a CAPTCHA does not arrive as a bug report.&lt;/p&gt;

&lt;h2&gt;
  
  
  How are retries counted?
&lt;/h2&gt;

&lt;p&gt;The engine reads the attempt number of the run. A passing test with a retry number above zero is FLAKY, unless a selector was healed, in which case it is AUTO_RECOVER. A failing or timed-out test with a retry number above zero, and no environment explanation, is BREACHED_FLAKY. A clean pass needs retry zero and no healed selector.&lt;/p&gt;

&lt;p&gt;FLAKY means the attempts disagreed, and nothing else. A failure on a single attempt, with zero retries, is never labeled flaky. Each History row also records &lt;code&gt;retry_attempt&lt;/code&gt; and &lt;code&gt;attempts&lt;/code&gt;, so the count stays with the run.&lt;/p&gt;

&lt;h2&gt;
  
  
  What evidence does each verdict leave?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;FLAKY&lt;/strong&gt;: screenshot.png, metadata.json and raw-data.json. The folder keeps the failed attempt's raw-data.json, so a retry that hid the failure still leaves its log. This follows the setting Keep evidence of a FLAKY / AUTO_RECOVER pass, which is on by default.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BREACHED_FLAKY&lt;/strong&gt;: report.md, metadata.json, raw-data.json and screenshot.png, and its failure video is kept by default.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BREACHED&lt;/strong&gt;: the same files, with the video kept by default.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The verdict is in the evidence folder's name, for example a name that ends in &lt;code&gt;[BREACHED]&lt;/code&gt;. The &lt;a href="https://sentinel-nexusstudio.com/evidence" rel="noopener noreferrer"&gt;Evidence page&lt;/a&gt; follows one failed test through every file.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does History spot a test that flips?
&lt;/h2&gt;

&lt;p&gt;History keeps one row per run for each test and browser or device, with the verdict, the retry attempt and the error signature. From those rows it shows trends by session, day or week: Regressed, Recovered, Still broken and Slower. A test that goes green, red and green again shows up there instead of disappearing into reruns.&lt;/p&gt;

&lt;p&gt;The risk ranking, in the Evidence Locker and in Patrol, orders tests by how often they flip, break or cost time. It also shows a predicted risk from a logistic regression over your history, with an EWMA fallback when data is thin. Nothing is called flaky below five runs, because one or two runs cannot show a pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Retries are what separate FLAKY from SECURE and BREACHED_FLAKY from BREACHED. With retries off, an intermittent failure is a BREACHED.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;FLAKY says the attempts disagreed. It does not say why. Finding the cause in the application or in the test is still work for a person.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The classification reads error text, so a custom assertion message that contains words such as &lt;code&gt;403&lt;/code&gt; or &lt;code&gt;Forbidden&lt;/code&gt; can read as an environment problem. Open metadata.json when a verdict surprises you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Below five runs, History and the risk ranking call nothing flaky.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where to go next
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://sentinel-nexusstudio.com/evidence" rel="noopener noreferrer"&gt;Evidence page&lt;/a&gt; shows every file a failed test leaves, and &lt;a href="https://sentinel-nexusstudio.com/docs/verdicts" rel="noopener noreferrer"&gt;How Nexus Studio decides 14 test verdicts&lt;/a&gt; explains the order of the checks. The &lt;a href="https://sentinel-nexusstudio.com/download" rel="noopener noreferrer"&gt;30-day trial&lt;/a&gt; runs the same engine on your own tests.&lt;/p&gt;

</description>
      <category>playwright</category>
      <category>testing</category>
      <category>qa</category>
      <category>selenium</category>
    </item>
    <item>
      <title>Why do my tests fail when the application is fine?</title>
      <dc:creator>nexus studio</dc:creator>
      <pubDate>Sat, 17 Oct 2026 15:48:28 +0000</pubDate>
      <link>https://dev.to/nexus_studioqa/why-do-my-tests-fail-when-the-application-is-fine-5f3c</link>
      <guid>https://dev.to/nexus_studioqa/why-do-my-tests-fail-when-the-application-is-fine-5f3c</guid>
      <description>&lt;p&gt;An end-to-end test goes red when the network is slow, the DNS fails, the site answers with a 403 or a 429 or shows a bot challenge, or the browser dies, and none of that is a defect in your application. Nexus Studio, from Verdict System LLC, gives these failures their own verdicts: TIMEOUT, UNREACHABLE, BLOCKED and CRASHED. None of them is reported as a bug in the application.&lt;/p&gt;

&lt;p&gt;By the Nexus Studio team, Verdict System LLC. October 7, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes a test fail without a bug?
&lt;/h2&gt;

&lt;p&gt;A test only reports that something did not happen. The cause can sit in four places that have nothing to do with your code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;the page was slow and the test ran out of time;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;the host could not be reached, for example because the name did not resolve;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;the site defended itself with a 403, a 429, a CAPTCHA or a bot challenge, so the request never reached your product;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;the browser or the process died.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When every one of these reads as a plain red, the team files them as bugs, or learns to rerun reds instead of reading them. Either way the real defect hides in the noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does Nexus Studio tell a false failure from a bug?
&lt;/h2&gt;

&lt;p&gt;When a test fails, the engine reads the error message and the network log of the run and tests them against groups of patterns in a fixed order. The first group that matches decides the verdict. The order is CONFIG_ERROR, then CRASHED, BLOCKED, UNREACHABLE and TIMEOUT, and only then BREACHED_FLAKY or BREACHED. So BREACHED, the verdict that means a bug report, is left for a failure that no environment or harness pattern explains. The patterns cover both Playwright and Selenium WebDriver wording.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do TIMEOUT, UNREACHABLE, BLOCKED and CRASHED mean?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TIMEOUT&lt;/strong&gt;: the test never got an answer in time. That is not proof the application is broken, and it is not proof it works: the run cannot tell. A navigation that ran out of time is a TIMEOUT, because it started and the page was slow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UNREACHABLE&lt;/strong&gt;: the host could not be reached at all. DNS or the connection failed before any page was observed, as with a name that did not resolve, a refused connection or an offline machine. A certificate error is not here: that one is a finding.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BLOCKED&lt;/strong&gt;: the site defended itself with a 403, a 429, a block page or a bot challenge. When a defense was on screen, metadata.json names it. A real Android phone that fell asleep or is locked is BLOCKED too, as an unmet prerequisite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CRASHED&lt;/strong&gt;: the browser or the process died, for example a closed page, a DevTools protocol error or a dead WebDriver session. It is infrastructure: look at the machine and the driver.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://sentinel-nexusstudio.com/docs/verdicts" rel="noopener noreferrer"&gt;verdicts guide&lt;/a&gt; lists the exact error patterns behind each one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does my CI pipeline see?
&lt;/h2&gt;

&lt;p&gt;Seven of the 14 verdicts exit 0: SECURE, AUTO_RECOVER, FLAKY, CHAOS_RESILIENT, PERFORMANCE_DEGRADED, A11Y_VIOLATION and SECURITY_VIOLATION. The other seven exit 1, and TIMEOUT, UNREACHABLE, BLOCKED and CRASHED are among them. So the build still goes red, because the test did not pass, but the report and History say which cause it was. The pytest and Selenium runners exit 2 when the run could not start at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  What evidence does each false failure keep?
&lt;/h2&gt;

&lt;p&gt;Each of the four keeps report.md, metadata.json, raw-data.json and a screenshot of the final frame. Video differs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TIMEOUT&lt;/strong&gt; and &lt;strong&gt;BLOCKED&lt;/strong&gt;: video is off by default. Turn it on in Settings, under Keep failure video for.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UNREACHABLE&lt;/strong&gt;: no video is offered, because no page loaded and the recording would be blank.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CRASHED&lt;/strong&gt;: no video is offered, because the recording of a dead browser comes out broken.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Only Playwright web and emulated mobile runs record video. A real Android phone, a Selenium run and an API test do not.&lt;/p&gt;

&lt;p&gt;With Jira switched on, a TIMEOUT files a ticket, and a block, a crash and an unreachable site never do.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the limits?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The classification reads error text. A message you wrote yourself that contains &lt;code&gt;403&lt;/code&gt;, &lt;code&gt;Forbidden&lt;/code&gt; or &lt;code&gt;Access Denied&lt;/code&gt; reads as BLOCKED. Keep custom assertion messages specific, and open metadata.json when a verdict surprises you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A TIMEOUT is not proof that the application works. A test that times out on every run deserves a look.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A longer timeout does not hide a broken element: it fails later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;These verdicts name the cause of a failed run. They do not remove the cause: a blocked site is still blocked until you change how you reach it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where can I see it?
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://sentinel-nexusstudio.com/evidence" rel="noopener noreferrer"&gt;Evidence page&lt;/a&gt; follows one failed test and lists every file each verdict leaves on your disk. The &lt;a href="https://sentinel-nexusstudio.com/docs/verdicts" rel="noopener noreferrer"&gt;verdicts guide&lt;/a&gt; explains in what order the engine decides all 14. The &lt;a href="https://sentinel-nexusstudio.com/download" rel="noopener noreferrer"&gt;30-day trial&lt;/a&gt; runs the same engine on your own tests.&lt;/p&gt;

</description>
      <category>playwright</category>
      <category>testing</category>
      <category>qa</category>
      <category>cicd</category>
    </item>
  </channel>
</rss>
