<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  
  <title>AutoExplore Blog</title>
  <subtitle>AutoExplore product updates and development stories.</subtitle>
  <link href="https://www.autoexplore.ai/blog/blog/feed.xml" rel="self" />
  <link href="https://www.autoexplore.ai/blog/" />
  <updated>2026-04-24T00:00:00Z</updated>
  <id>https://www.autoexplore.ai/blog/</id>
  <author>
    <name>Sampo Kivistö</name>
  </author>
  <entry>
    <title>Hunting a Windows ARM crash through Rust, C, and build-system configurations</title>
    <link href="https://www.autoexplore.ai/pages/blog/windows_arm_crash_rust_c_build_system/" />
    <updated>2026-04-24T00:00:00Z</updated>
    <id>https://www.autoexplore.ai/pages/blog/windows_arm_crash_rust_c_build_system/</id>
    <content type="html">&lt;h1 id=&quot;hunting-a-windows-arm-crash-through-rust-c-and-build-system-configurations&quot;&gt;Hunting a Windows ARM crash through Rust, C, and build-system configurations&lt;/h1&gt;&lt;p&gt;A routine allocator update turned into one of the most interesting debugging sessions I have had in a while.&lt;/p&gt;&lt;p&gt;Working on my Rust projects GitComet and AutoExplore, we use mimalloc for memory allocation. It has been a great fit for both projects and helped reduce memory usage noticeably, so updating it felt like routine maintenance.&lt;/p&gt;&lt;p&gt;Upgrading to mimalloc 3.3 suddenly broke the Windows ARM64 CI pipeline. Linux passed. macOS passed. x86_64 Windows passed. Only &lt;code&gt;aarch64-pc-windows-msvc&lt;/code&gt; failed, and it failed hard:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;(exit code: 0xc0000005, STATUS_ACCESS_VIOLATION)&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;No stack trace. No helpful panic. No obvious clue.&lt;/p&gt;&lt;p&gt;That was the moment this stopped being a dependency update and turned into a bug hunt.&lt;/p&gt;&lt;h2 id=&quot;the-kind-of-failure-that-gives-you-nothing&quot;&gt;The kind of failure that gives you nothing&lt;/h2&gt;&lt;p&gt;The only change in the pull request was the mimalloc upgrade, and the previous version did not produce the error.&lt;/p&gt;&lt;p&gt;That narrowed the problem down enough that I opened an issue in mimalloc, because the regression looked real. The maintainer suggested trying &lt;code&gt;-DMI_WIN_INIT_USE_TLS_DLLMAIN=1&lt;/code&gt;, which was a good lead, but I hit another problem immediately: I was using mimalloc through the Rust crate &lt;a href=&quot;https://github.com/purpleprotocol/mimalloc_rust&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;mimalloc_rust&lt;/code&gt;&lt;/a&gt;, and I did not yet understand how to pass that kind of flag through the Rust build.&lt;/p&gt;&lt;p&gt;That part turned out to be unexpectedly educational.&lt;/p&gt;&lt;p&gt;I had always treated &lt;code&gt;mimalloc_rust&lt;/code&gt; like a normal Rust dependency, but under the hood it compiles a C codebase as part of the crate build. Looking through the sources, I found the &lt;a href=&quot;https://crates.io/crates/cc&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;cc&lt;/code&gt; crate&lt;/a&gt;, which is the standard bridge Rust uses to compile C, C++, assembly, and even CUDA during &lt;code&gt;build.rs&lt;/code&gt;.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;fn main() {
    cc::Build::new()
        .file(&amp;quot;native/hello.c&amp;quot;)
        .compile(&amp;quot;hello&amp;quot;);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That is the basic shape: a Rust crate can look ordinary from Cargo&#39;s point of view while still compiling native code during the build.&lt;/p&gt;&lt;figure class=&quot;rounded-lg overflow-hidden border border-border/50 bg-muted/20&quot;&gt;&lt;a href=&quot;https://www.autoexplore.ai/img/blog/build_rs_example.png&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; aria-label=&quot;Open build.rs example image in full size&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://www.autoexplore.ai/img/h0myGTrLJB-768.avif 768w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.autoexplore.ai/img/h0myGTrLJB-768.webp 768w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;img src=&quot;https://www.autoexplore.ai/img/h0myGTrLJB-768.png&quot; alt=&quot;A minimal build.rs example using the cc crate to compile C code&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;768&quot; height=&quot;174&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;figcaption class=&quot;px-4 py-3 text-sm text-muted-foreground border-t border-border/50 bg-card/70&quot;&gt;Simple example of building C sources through Rust build system using CC&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2 id=&quot;first-reaction-turn-on-more-debugging&quot;&gt;First reaction: turn on more debugging&lt;/h2&gt;&lt;p&gt;My first instinct was simple: compile mimalloc with more diagnostics and get a better failure.&lt;/p&gt;&lt;p&gt;I found that mimalloc exposes flags like &lt;code&gt;MI_DEBUG&lt;/code&gt; and &lt;code&gt;MI_SHOW_ERRORS&lt;/code&gt; through Cargo environment variables, so I turned those on and reran the failing job.&lt;/p&gt;&lt;p&gt;Same crash. Same exit code. Still no stack trace.&lt;/p&gt;&lt;p&gt;Normally that is where a bug like this stalls for a while.&lt;/p&gt;&lt;h2 id=&quot;using-ci-as-a-remote-debugger&quot;&gt;Using CI as a remote debugger&lt;/h2&gt;&lt;p&gt;Since I could not reproduce the problem locally, I tried to get the failing GitHub Actions runner to capture a dump at the moment of the crash.&lt;/p&gt;&lt;p&gt;I used ProcDump from a PowerShell script in CI to watch the test binary, catch the unhandled exception, and upload the resulting dump as an artifact. GPT-5.4 helped speed up that part by generating the right command-line plumbing for ProcDump and the artifact upload steps.&lt;/p&gt;&lt;figure class=&quot;rounded-lg overflow-hidden border border-border/50 bg-muted/20&quot;&gt;&lt;a href=&quot;https://www.autoexplore.ai/img/blog/CI_failure_win_arm.png&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; aria-label=&quot;Open Windows ARM CI failure image in full size&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://www.autoexplore.ai/img/QmZ-6Q9Auz-768.avif 768w, https://www.autoexplore.ai/img/QmZ-6Q9Auz-1463.avif 1463w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.autoexplore.ai/img/QmZ-6Q9Auz-768.webp 768w, https://www.autoexplore.ai/img/QmZ-6Q9Auz-1463.webp 1463w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;img src=&quot;https://www.autoexplore.ai/img/QmZ-6Q9Auz-768.png&quot; alt=&quot;Windows ARM64 CI failing with STATUS_ACCESS_VIOLATION after upgrading mimalloc&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1463&quot; height=&quot;366&quot; srcset=&quot;https://www.autoexplore.ai/img/QmZ-6Q9Auz-768.png 768w, https://www.autoexplore.ai/img/QmZ-6Q9Auz-1463.png 1463w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;figcaption class=&quot;px-4 py-3 text-sm text-muted-foreground border-t border-border/50 bg-card/70&quot;&gt;Linux, macOS, and x86_64 Windows were green. Only the Windows ARM64 lane failed.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;After a few iterations, I got the dump.&lt;/p&gt;&lt;p&gt;And finally, the failure had a shape:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;This dump file has an exception of interest stored in it.
(290c.71c): Access violation - code c0000005
gitcomet_5e0245ab8a6fea4a!_InterlockedCompareExchange64+0xc
Attempt to write to address 00007ff743eb4b88

STACK_TEXT:
gitcomet_5e0245ab8a6fea4a!_InterlockedCompareExchange64+0xc
gitcomet_5e0245ab8a6fea4a!_mi_malloc_generic+0x44
gitcomet_5e0245ab8a6fea4a!_mi_theap_malloc_zero+0xd8
gitcomet_5e0245ab8a6fea4a!std::sys::pal::windows::to_u16s::inner+0x60
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The most important clue was that the crash happened inside &lt;code&gt;_InterlockedCompareExchange64&lt;/code&gt;, with an access violation on Windows ARM64. In other words, something that looked like a read path was going through an atomic compare-and-exchange operation and touching memory it was not allowed to modify.&lt;/p&gt;&lt;p&gt;That was the first moment the bug became exciting instead of frustrating.&lt;/p&gt;&lt;h2 id=&quot;the-bug-was-a-load-that-was-not-really-a-load&quot;&gt;The bug was a load that was not really a load&lt;/h2&gt;&lt;p&gt;Once I had the dump, I started digging into mimalloc&#39;s atomic code. I am not a daily C or C++ engineer, so this meant slowing down and understanding what the code was actually trying to do.&lt;/p&gt;&lt;p&gt;In one code path, mimalloc was effectively using compare-and-exchange as if it were a load. That sounds harmless at first, because the code was comparing &lt;code&gt;x&lt;/code&gt; and writing back the same &lt;code&gt;x&lt;/code&gt;. But on ARM64, that is still not a plain read. It is a read-modify-write atomic operation.&lt;/p&gt;&lt;p&gt;That difference mattered because the pointer being accessed could point into sentinel objects like &lt;code&gt;mi_theap_empty&lt;/code&gt; or &lt;code&gt;mi_page_empty&lt;/code&gt;, which live in read-only memory.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A code path wanted an ordered load.&lt;/li&gt;&lt;li&gt;Instead of performing a true load, it used compare-and-exchange.&lt;/li&gt;&lt;li&gt;On Windows ARM64, that became a write-capable atomic instruction.&lt;/li&gt;&lt;li&gt;The target happened to be read-only sentinel storage.&lt;/li&gt;&lt;li&gt;Windows raised &lt;code&gt;STATUS_ACCESS_VIOLATION&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That is the kind of bug that can stay invisible for a long time because it depends on three things lining up at once: a specific architecture, a specific compiler lowering, and a specific object layout.&lt;/p&gt;&lt;p&gt;There was also a const-correctness problem in the pointer load macros. The old macros cast away &lt;code&gt;const&lt;/code&gt;, which made it easier for the type system to accept a path that could mutate memory even when the underlying storage should have been treated as read-only. Fixing that did not just make the code prettier. It made the contract clearer: loads should accept read-only storage, and load helpers should stay loads.&lt;/p&gt;&lt;figure class=&quot;rounded-lg overflow-hidden border border-border/50 bg-muted/20&quot;&gt;&lt;a href=&quot;https://www.autoexplore.ai/img/blog/mimalloc_header_diff.png&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; aria-label=&quot;Open mimalloc header diff image in full size&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://www.autoexplore.ai/img/l7FOu4blI_-768.avif 768w, https://www.autoexplore.ai/img/l7FOu4blI_-1495.avif 1495w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.autoexplore.ai/img/l7FOu4blI_-768.webp 768w, https://www.autoexplore.ai/img/l7FOu4blI_-1495.webp 1495w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;img src=&quot;https://www.autoexplore.ai/img/l7FOu4blI_-768.png&quot; alt=&quot;Const-correctness fix in mimalloc pointer load macros&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1495&quot; height=&quot;670&quot; srcset=&quot;https://www.autoexplore.ai/img/l7FOu4blI_-768.png 768w, https://www.autoexplore.ai/img/l7FOu4blI_-1495.png 1495w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;figcaption class=&quot;px-4 py-3 text-sm text-muted-foreground border-t border-border/50 bg-card/70&quot;&gt;Part of the fix was tightening the pointer load macros so they preserve &lt;code&gt;const&lt;/code&gt; instead of silently casting it away.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;The functional fix was even more important. The compare-and-exchange loop was removed from the load path and replaced with real ordered load operations on ARM, using the correct intrinsics for acquire semantics.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;The old code was &amp;quot;reading by doing CAS,&amp;quot; while the fixed code was &amp;quot;reading by doing an actual ordered load.&amp;quot;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Once you see it that way, the crash makes perfect sense.&lt;/p&gt;&lt;figure class=&quot;rounded-lg overflow-hidden border border-border/50 bg-muted/20&quot;&gt;&lt;a href=&quot;https://www.autoexplore.ai/img/blog/mimalloc_diff.png&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; aria-label=&quot;Open mimalloc atomic load fix image in full size&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://www.autoexplore.ai/img/kh9ueymGFJ-768.avif 768w, https://www.autoexplore.ai/img/kh9ueymGFJ-1495.avif 1495w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.autoexplore.ai/img/kh9ueymGFJ-768.webp 768w, https://www.autoexplore.ai/img/kh9ueymGFJ-1495.webp 1495w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;img src=&quot;https://www.autoexplore.ai/img/kh9ueymGFJ-768.png&quot; alt=&quot;Mimalloc atomic load implementation changed from CAS-based load to ordered ARM loads&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1495&quot; height=&quot;907&quot; srcset=&quot;https://www.autoexplore.ai/img/kh9ueymGFJ-768.png 768w, https://www.autoexplore.ai/img/kh9ueymGFJ-1495.png 1495w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;/picture&gt;&lt;/a&gt;&lt;figcaption class=&quot;px-4 py-3 text-sm text-muted-foreground border-t border-border/50 bg-card/70&quot;&gt;The real functional change was replacing the compare-and-exchange loop with architecture-appropriate ordered loads on ARM.&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2 id=&quot;the-real-surprise-was-not-just-the-bug-but-how-we-built-it&quot;&gt;The real surprise was not just the bug, but how we built it&lt;/h2&gt;&lt;p&gt;At that point I understood why the access violation happened, but why had this not been caught sooner?&lt;/p&gt;&lt;p&gt;The answer led back to the build system.&lt;/p&gt;&lt;p&gt;Upstream mimalloc was not being compiled the same way as the Rust wrapper in my project. On the MSVC and Windows ARM family of targets, upstream behavior was compiling the code as C++, while the Rust wrapper still compiled &lt;code&gt;static.c&lt;/code&gt; as C through &lt;code&gt;build.rs&lt;/code&gt;. In the C++ version, that particular atomic file was not included in the output, and the C++ path relied on its own atomics implementation.&lt;/p&gt;&lt;p&gt;So this was not just a low-level allocator bug. It was a mixture of:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Rust and C&lt;/li&gt;&lt;li&gt;Crate build scripts and upstream build logic&lt;/li&gt;&lt;li&gt;Architecture-specific atomics and compiler behavior on Windows ARM64&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That is exactly why it was so difficult to spot from the outside.&lt;/p&gt;&lt;p&gt;The workaround on our side was to compile mimalloc more like upstream does for Windows ARM and MSVC-family targets, including using the C++ compiler path there. I also raised the upstream issue and put together a PR on our side to address the Rust build differences.&lt;/p&gt;&lt;h2 id=&quot;why-i-wanted-to-share-this&quot;&gt;Why I wanted to share this&lt;/h2&gt;&lt;p&gt;I enjoyed this bug far more than I expected to.&lt;/p&gt;&lt;p&gt;It started with a useless exit code and ended up teaching me several things at once:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;how Rust crates can compile and ship C code under the hood&lt;/li&gt;&lt;li&gt;how to capture crash dumps from CI even without direct access to the target device&lt;/li&gt;&lt;li&gt;how small type-system lies around &lt;code&gt;const&lt;/code&gt; can enable real platform bugs&lt;/li&gt;&lt;li&gt;how one architecture can expose assumptions that seem harmless elsewhere&lt;/li&gt;&lt;li&gt;how build-system differences can be just as important as source-code differences&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That is why this felt worth writing up. It was not just &amp;quot;I fixed a crash.&amp;quot; It was a reminder that some of the best debugging sessions force you to understand the layers below the one you normally work in.&lt;/p&gt;&lt;p&gt;If you enjoy this kind of investigation, GitComet is the tool we are building for exactly this style of work: engineers chasing real regressions through code diffs, dependency updates, and cross-platform behavior.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>GitComet Release</title>
    <link href="https://www.autoexplore.ai/pages/blog/gitcomet_release/" />
    <updated>2026-03-12T00:00:00Z</updated>
    <id>https://www.autoexplore.ai/pages/blog/gitcomet_release/</id>
    <content type="html">&lt;h1 id=&quot;gitcomet-release&quot;&gt;GitComet Release&lt;/h1&gt;&lt;p&gt;At AutoExplore, we work with large repositories and large file diffs every day. We tried multiple graphical Git clients, but we could not find one that stayed fast and usable for the workflows we needed.&lt;/p&gt;&lt;p&gt;Because of that, we built GitComet and started using it internally to manage our own Git workflows.&lt;/p&gt;&lt;p&gt;Today, we are also releasing GitComet publicly as open source, so anyone can use it. GitComet is free for both individuals and organizations.&lt;/p&gt;&lt;h2 id=&quot;what-gitcomet-is&quot;&gt;What GitComet is&lt;/h2&gt;&lt;p&gt;GitComet is a fast, local-first Git GUI written in Rust. It is designed for teams that want familiar Git workflows with better responsiveness in large codebases.&lt;/p&gt;&lt;h2 id=&quot;what-you-can-do-with-gitcomet&quot;&gt;What you can do with GitComet&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Browse repository history and inspect changes in a desktop UI&lt;/li&gt;&lt;li&gt;Stage, unstage, and commit with familiar Git workflows&lt;/li&gt;&lt;li&gt;Work with branches and worktrees&lt;/li&gt;&lt;li&gt;Use focused diff and merge tooling for day-to-day code review and conflict resolution&lt;/li&gt;&lt;li&gt;Run it as a standalone app or integrate it into &lt;code&gt;git difftool&lt;/code&gt; and &lt;code&gt;git mergetool&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;GitComet is available for Linux, macOS, and Windows.&lt;/p&gt;&lt;h2 id=&quot;easy-difftool-and-mergetool-setup&quot;&gt;Easy difftool and mergetool setup&lt;/h2&gt;&lt;p&gt;If you want to use GitComet directly from Git, you can configure it with:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gitcomet-app setup
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And remove the integration later with:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gitcomet-app uninstall
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;open-source-and-free&quot;&gt;Open source and free&lt;/h2&gt;&lt;p&gt;GitComet is open source under AGPL-3.0 and available for free use by individuals and organizations.&lt;/p&gt;&lt;p&gt;To try it now:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Download releases from &lt;a href=&quot;https://github.com/Auto-Explore/GitComet/releases&quot; class=&quot;text-primary&quot; target=&quot;_blank&quot;&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Explore the source code at &lt;a href=&quot;https://github.com/Auto-Explore/GitComet&quot; class=&quot;text-primary&quot; target=&quot;_blank&quot;&gt;Auto-Explore/GitComet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Learn more at &lt;a href=&quot;https://gitcomet.dev&quot; class=&quot;text-primary&quot; target=&quot;_blank&quot;&gt;gitcomet.dev&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <title>Autonomous Testing Agent Benchmark in works</title>
    <link href="https://www.autoexplore.ai/pages/blog/what_should_we_measure_in_exploratory_testing/" />
    <updated>2026-02-17T00:00:00Z</updated>
    <id>https://www.autoexplore.ai/pages/blog/what_should_we_measure_in_exploratory_testing/</id>
    <content type="html">&lt;h1 id=&quot;autonomous-testing-agent-benchmark-in-works&quot;&gt;Autonomous Testing Agent Benchmark in works&lt;/h1&gt;&lt;p&gt;At AutoExplore, we’re building a benchmark to evaluate and improve agentic exploratory testing capabilities.&lt;/p&gt;&lt;p&gt;Our goal is simple: create a fair, transparent way to measure how well autonomous agents explore, detect issues, and learn from software systems.&lt;/p&gt;&lt;p&gt;We are looking for input from testing professionals and developers. Measuring the wrong things can distort behavior. Measuring the right things can unlock real progress.&lt;/p&gt;&lt;h2 id=&quot;what-do-we-mean-by-exploratory-testing-for-agents&quot;&gt;What do we mean by “exploratory testing” for agents?&lt;/h2&gt;&lt;p&gt;One of the first questions we got from the community was: how are we defining exploratory testing here?&lt;/p&gt;&lt;p&gt;In human testing, exploratory testing is often described as simultaneous test design and execution, guided by learning and discovery. Some people will question whether agents can truly do that today. It may be that what agents do right now is something new that sits between mechanical script execution and human-led discovery. (&lt;a href=&quot;https://club.ministryoftesting.com/t/what-should-we-measure-in-exploratory-testing/87123&quot; class=&quot;text-primary&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Ministry of Testing: What should we measure in exploratory testing?&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;Our working definition for this benchmark is intentionally simple:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;We do not tell the agent what to test (no test cases, no scripted steps, no predefined assertions).&lt;/li&gt;&lt;li&gt;The agent decides what to explore, what to try next, and what to report as issues.&lt;/li&gt;&lt;li&gt;We evaluate the results (coverage, findings, report quality, efficiency) using transparent scoring.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you think this definition is wrong (or too broad), we want to hear that too. The definition drives the incentives.&lt;/p&gt;&lt;h2 id=&quot;what-we-are-currently-planning-to-measure&quot;&gt;What we are currently planning to measure&lt;/h2&gt;&lt;h3 id=&quot;1-exploration-and-coverage&quot;&gt;1) Exploration and coverage&lt;/h3&gt;&lt;p&gt;Exploratory testing is about navigating unknown territory without being told exactly what to do. We want to measure how broadly and deeply an agent explores, without prescribing a strategy.&lt;/p&gt;&lt;p&gt;We are currently tracking metrics like:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Number of discovered views, pages, and URLs&lt;/li&gt;&lt;li&gt;Coverage of interactive elements&lt;/li&gt;&lt;li&gt;Links tested (count and proportion)&lt;/li&gt;&lt;li&gt;Buttons tested (count and proportion)&lt;/li&gt;&lt;li&gt;Inputs tested (count and proportion)&lt;/li&gt;&lt;li&gt;Total number of operations performed&lt;/li&gt;&lt;li&gt;Data entry variations attempted&lt;/li&gt;&lt;li&gt;Order-of-operation permutations (how many distinct sequences were exercised)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;These counts are not the end goal. They are instrumentation signals that help us understand whether the agent touched the product at all, and whether the tool is stable. On their own, they do not capture the core value of exploratory testing: discovery, learning, and risk reduction.&lt;/p&gt;&lt;p&gt;What we want to avoid is a benchmark that rewards mindless clicking. Coverage should reflect meaningful exploration, not just activity.&lt;/p&gt;&lt;h3 id=&quot;2-defect-detection-quality&quot;&gt;2) Defect detection quality&lt;/h3&gt;&lt;p&gt;Finding bugs is not enough. Reporting noise is costly, and missing critical issues is worse.&lt;/p&gt;&lt;p&gt;We are thinking in confusion-matrix terms:&lt;/p&gt;&lt;table class=&quot;confusion-matrix&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th scope=&quot;col&quot;&gt;&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;Reported as issue&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;Not reported&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;Real defect&lt;/th&gt;&lt;td&gt;True positive&lt;/td&gt;&lt;td&gt;False negative&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;Not a defect&lt;/th&gt;&lt;td&gt;False positive&lt;/td&gt;&lt;td&gt;True negative&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;From this we can measure:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Precision (how many reported issues are real)&lt;/li&gt;&lt;li&gt;Recall (how many real defects get reported)&lt;/li&gt;&lt;li&gt;Signal-to-noise ratio (useful findings vs noise)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The tricky part is definitions: what counts as “the same issue”, what severity bucket it belongs in, and how to score partial reports.&lt;/p&gt;&lt;p&gt;In practice, our approach is: the agent produces a human-readable report, and then a judge (human, another agent, or both) classifies the outcome so we can compute precision/recall.&lt;/p&gt;&lt;p&gt;An example of a strong defect report format is:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Expected:&lt;/strong&gt; Clicking “Create a free account” should open a registration flow with the required fields.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Actual:&lt;/strong&gt; The UI stays on the login form and the registration fields never appear.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Reproduction steps:&lt;/strong&gt; Open the page, click the “Create a free account” button, observe the missing registration flow.&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;3-efficiency&quot;&gt;3) Efficiency&lt;/h3&gt;&lt;p&gt;Exploration is also about discovering value quickly.&lt;/p&gt;&lt;p&gt;We want to measure:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Total test time&lt;/li&gt;&lt;li&gt;Time to first defect&lt;/li&gt;&lt;li&gt;Time to first critical defect&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;what-else-should-we-measure&quot;&gt;What else should we measure?&lt;/h2&gt;&lt;p&gt;This is where we need the community. If you have opinions (or hard-won lessons), we’d love to hear them.&lt;/p&gt;&lt;p&gt;Here are some candidate areas we are considering, but we do not want to bake in the wrong incentives:&lt;/p&gt;&lt;h4 id=&quot;example-a-charter-based-perspective&quot;&gt;Example: a charter-based perspective&lt;/h4&gt;&lt;p&gt;Exploratory testers often work with session charters, for example:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Mobile connectivity: Explore the app with a poor network connection to discover whether it still works as expected or provides helpful error messages.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;If we wanted metrics for that single charter, we might measure things like:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Behavior under network profiles (slow, loss, intermittent offline)&lt;/li&gt;&lt;li&gt;Whether critical flows still complete (or fail safely)&lt;/li&gt;&lt;li&gt;Error message quality (clear, actionable, not misleading)&lt;/li&gt;&lt;li&gt;Recovery (retry works, state is preserved, no duplicate submissions)&lt;/li&gt;&lt;li&gt;Evidence quality (screenshots, network traces, timings, logs)&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;report-usefulness&quot;&gt;Report usefulness&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Reproducibility (are the steps sufficient and deterministic?)&lt;/li&gt;&lt;li&gt;Deduplication (does the agent file the same issue repeatedly?)&lt;/li&gt;&lt;li&gt;Quality of evidence (screenshots, logs, timings, network traces, console output)&lt;/li&gt;&lt;li&gt;Severity and priority classification accuracy&lt;/li&gt;&lt;li&gt;Minimization (can it reduce to the smallest set of steps that still reproduces?)&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;depth-and-state-coverage&quot;&gt;Depth and state coverage&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Unique UI states reached (not just pages or URLs)&lt;/li&gt;&lt;li&gt;Multi-step flows covered (for example onboarding, checkout, role-based paths)&lt;/li&gt;&lt;li&gt;Data state variation (different users, permissions, seeded datasets)&lt;/li&gt;&lt;li&gt;Negative-path exploration (invalid inputs, boundary values, empty states)&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;robustness-and-autonomy&quot;&gt;Robustness and autonomy&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Recovery from dead ends (modals, error pages, expired sessions)&lt;/li&gt;&lt;li&gt;Resilience to flaky UI behavior (timing, spinners, animations)&lt;/li&gt;&lt;li&gt;Ability to continue exploring after encountering failures&lt;/li&gt;&lt;li&gt;Avoidance of destructive actions in shared test environments&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;learning-across-runs&quot;&gt;Learning across runs&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Reduced repetition (does it avoid re-testing the same things?)&lt;/li&gt;&lt;li&gt;Novelty rate (how much new surface is discovered per unit time)&lt;/li&gt;&lt;li&gt;Regression detection (does it re-validate known risky areas after changes?)&lt;/li&gt;&lt;li&gt;Knowledge transfer (can it reuse what it learned on one app to bootstrap another?)&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;cost&quot;&gt;Cost&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Compute cost per hour of testing&lt;/li&gt;&lt;li&gt;Cost per unique defect (or per high-severity defect)&lt;/li&gt;&lt;li&gt;Browser and API resource usage&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you have a strong take on any of these (or you think we should ignore some entirely), email me at &lt;a href=&quot;mailto:sampo.kivisto@autoexplore.ai&quot; class=&quot;text-primary&quot;&gt;sampo.kivisto@autoexplore.ai&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;we-are-also-looking-for-benchmark-applications&quot;&gt;We are also looking for benchmark applications&lt;/h2&gt;&lt;p&gt;We are searching for test applications with a known, documented list of issues.&lt;/p&gt;&lt;p&gt;Ideally:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Publicly available&lt;/li&gt;&lt;li&gt;Designed for testing practice&lt;/li&gt;&lt;li&gt;With known defect catalogs (so we can score false positives and false negatives)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you know applications built for this purpose, we’d love to evaluate them for inclusion in the benchmark. We will credit you and the original author.&lt;/p&gt;&lt;p&gt;When you suggest an app, it helps if you can include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Link to repo and license&lt;/li&gt;&lt;li&gt;How to run it locally (or hosted URL)&lt;/li&gt;&lt;li&gt;Where the defect list lives (docs, issue tracker, challenge list)&lt;/li&gt;&lt;li&gt;Any notes about which issues are in scope (UI, API, accessibility, security, performance)&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <title>AutoExplore is live!</title>
    <link href="https://www.autoexplore.ai/pages/blog/autoexplore_launch/" />
    <updated>2026-01-20T00:00:00Z</updated>
    <id>https://www.autoexplore.ai/pages/blog/autoexplore_launch/</id>
    <content type="html">&lt;h1 id=&quot;autoexplore-is-live&quot;&gt;AutoExplore is live&lt;/h1&gt;&lt;p&gt;Today we are launching AutoExplore.&lt;/p&gt;&lt;p&gt;AutoExplore delivers always on, autonomous testing that navigates your app like a real user. It clicks links, fills forms, and explores flows continuously, without test scripts. The goal is simple: help teams catch issues earlier, reduce regressions, and ship with more confidence.&lt;/p&gt;&lt;h2 id=&quot;what-you-can-do-with-autoexplore-on-day-one&quot;&gt;What you can do with AutoExplore on day one&lt;/h2&gt;&lt;h3 id=&quot;always-on-exploration&quot;&gt;Always on exploration&lt;/h3&gt;&lt;p&gt;Point AutoExplore at a Target Software Environment, provide credentials, and let the agent run. AutoExplore explores your UI in a real browser, interacting with the same elements your users interact with.&lt;/p&gt;&lt;h3 id=&quot;actionable-issue-reporting&quot;&gt;Actionable issue reporting&lt;/h3&gt;&lt;p&gt;Autonomous testing produces a lot of signal. AutoExplore turns that signal into reports that are easy to understand and easy to reproduce.&lt;/p&gt;&lt;p&gt;In the reports view, findings are categorized into areas like Errors, Audit, Performance, Deprecations, Accessibility, Security, and more. Each finding includes a timeline that shows what happened before, during, and after the issue, with screenshots and technical details. Related: &lt;a href=&quot;https://www.autoexplore.ai/pages/blog/autoexplore_reporting/&quot; class=&quot;text-primary&quot;&gt;AutoExplore issue reporting&lt;/a&gt;.&lt;/p&gt;&lt;h3 id=&quot;coverage-you-can-see&quot;&gt;Coverage you can see&lt;/h3&gt;&lt;p&gt;Understanding what an autonomous agent touched is just as important as the bugs it finds. AutoExplore provides a visual coverage view that highlights which UI elements were interacted with and where. Related: &lt;a href=&quot;https://www.autoexplore.ai/pages/blog/agent_coverage/&quot; class=&quot;text-primary&quot;&gt;Measuring AI Agent Coverage&lt;/a&gt;.&lt;/p&gt;&lt;h3 id=&quot;built-in-accessibility-testing&quot;&gt;Built in accessibility testing&lt;/h3&gt;&lt;p&gt;AutoExplore continuously scans for accessibility issues while it explores your app, helping you catch problems and edge cases without having to put the application into specific states manually. Related: &lt;a href=&quot;https://www.autoexplore.ai/pages/blog/accessibility_testing/&quot; class=&quot;text-primary&quot;&gt;Accessibility Testing&lt;/a&gt;.&lt;/p&gt;&lt;h3 id=&quot;integrated-security-scanning&quot;&gt;Integrated security scanning&lt;/h3&gt;&lt;p&gt;AutoExplore includes a safe, non destructive security scanner that analyzes your application as the agent navigates, helping surface misconfigurations like missing headers and insecure cookies with reproducible steps. Related: &lt;a href=&quot;https://www.autoexplore.ai/pages/blog/security_testing/&quot; class=&quot;text-primary&quot;&gt;AutoExplore Security Scanning&lt;/a&gt;.&lt;/p&gt;&lt;h3 id=&quot;scale-across-environments-and-teams&quot;&gt;Scale across environments and teams&lt;/h3&gt;&lt;p&gt;Whether you want parallel testing across staging and production, or you want to run multiple agents against the same environment with different users, AutoExplore supports multiple Target Software Environments and multiple Agents. Related: &lt;a href=&quot;https://www.autoexplore.ai/pages/blog/multiple_envs_multiple_agents/&quot; class=&quot;text-primary&quot;&gt;Multiple Environments Multiple Agents&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you want to reduce cost while still testing multiple smaller apps, you can share one agent across targets by scheduling it to rotate between environments. Related: &lt;a href=&quot;https://www.autoexplore.ai/pages/blog/agent_scheduler/&quot; class=&quot;text-primary&quot;&gt;AutoExplore Agent Scheduler&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;who-autoexplore-is-for&quot;&gt;Who AutoExplore is for&lt;/h2&gt;&lt;p&gt;AutoExplore is built for teams that ship and iterate fast, and want an extra layer of validation beyond unit tests, scripted end to end tests, and manual QA.&lt;/p&gt;&lt;p&gt;It is a good fit for:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;SaaS products and customer portals that change frequently&lt;/li&gt;&lt;li&gt;Internal tools that are business critical but hard to cover with scripts&lt;/li&gt;&lt;li&gt;Teams that want continuous regression coverage, not just pre release checks&lt;/li&gt;&lt;li&gt;Organizations that need security and accessibility visibility as part of QA&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;how-to-get-started&quot;&gt;How to get started&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;Start a 7 day trial at &lt;a href=&quot;https://app.autoexplore.ai&quot; class=&quot;text-primary&quot; target=&quot;_blank&quot;&gt;app.autoexplore.ai&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Create a Target Software Environment for your staging or production app&lt;/li&gt;&lt;li&gt;Add test credentials and start the agent&lt;/li&gt;&lt;li&gt;Review the first findings, then tune your setup (environments, users, and schedules)&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;If you want a guided walkthrough, book a live demo and we will help you set up AutoExplore for your application.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;br&gt;At AutoExplore, we are committed to helping R&amp;amp;D teams implement autonomous testing as part of their development processes. Ready to see what issues AutoExplore finds from your application? &lt;a href=&quot;https://outlook.office.com/book/AutoExploreMeeting@autoexplore.ai&quot; class=&quot;text-primary&quot; target=&quot;_blank&quot;&gt;Contact us for a demo&lt;/a&gt; to learn more.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>AutoExplore Agent Scheduler</title>
    <link href="https://www.autoexplore.ai/pages/blog/agent_scheduler/" />
    <updated>2026-01-07T00:00:00Z</updated>
    <id>https://www.autoexplore.ai/pages/blog/agent_scheduler/</id>
    <content type="html">&lt;h1 id=&quot;autoexplore-agent-scheduler&quot;&gt;AutoExplore Agent Scheduler&lt;/h1&gt;&lt;p&gt;Many teams don’t have just one product to test. They have a customer portal, an internal admin tool, a public website, and maybe a couple of smaller apps. If you provision a dedicated autonomous testing agent for each application, your testing cost scales with the number of apps.&lt;/p&gt;&lt;p&gt;At the same time, a single AutoExplore Agent can only test &lt;strong&gt;one&lt;/strong&gt; application (Target Software Environment) at a time.&lt;/p&gt;&lt;p&gt;The &lt;strong&gt;AutoExplore Agent Scheduler&lt;/strong&gt; solves this by letting you &lt;strong&gt;time‑share one agent across multiple applications&lt;/strong&gt;: the agent rotates between your selected target environments on a schedule, so each application gets its own testing window.&lt;/p&gt;&lt;h2 id=&quot;what-sharing-one-agent-means-in-practice&quot;&gt;What “sharing one agent” means in practice&lt;/h2&gt;&lt;p&gt;Think of the scheduler as a rotation plan:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;You define an &lt;strong&gt;ordered list&lt;/strong&gt; of Target Software Environments (each can point to a different application or environment).&lt;/li&gt;&lt;li&gt;You pick &lt;em&gt;when&lt;/em&gt; the agent should move to the next target.&lt;/li&gt;&lt;li&gt;AutoExplore automatically switches the agent to the next target when the schedule triggers.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To enable rotation, the scheduler must have at least &lt;strong&gt;two different&lt;/strong&gt; target environments configured.&lt;/p&gt;&lt;h2 id=&quot;scheduling-modes&quot;&gt;Scheduling modes&lt;/h2&gt;&lt;p&gt;The scheduler supports multiple ways to define the rotation cadence:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Interval&lt;/strong&gt;: rotate every &lt;em&gt;N&lt;/em&gt; minutes (minimum 60 minutes between rotations)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Time of day&lt;/strong&gt;: rotate once per day at a specific time&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Weekly&lt;/strong&gt;: rotate on a chosen weekday + time, optionally every &lt;em&gt;N&lt;/em&gt; weeks&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In the Control Panel, scheduler times are interpreted and shown as &lt;strong&gt;UTC-0&lt;/strong&gt;.&lt;/p&gt;&lt;h2 id=&quot;how-to-set-it-up&quot;&gt;How to set it up&lt;/h2&gt;&lt;p&gt;In the AutoExplore Control Panel:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Open your agent’s settings and go to &lt;strong&gt;Agent Scheduler&lt;/strong&gt; (currently marked as &lt;em&gt;Beta&lt;/em&gt;).&lt;/li&gt;&lt;li&gt;Add the Target Software Environments you want the agent to rotate between and arrange them in the desired order.&lt;/li&gt;&lt;li&gt;Pick the schedule type (Interval / Time of day / Weekly) and configure the time(s).&lt;/li&gt;&lt;li&gt;Use the preview to sanity-check the upcoming rotation plan.&lt;/li&gt;&lt;li&gt;Toggle the scheduler to &lt;strong&gt;Enabled&lt;/strong&gt; to start automatic rotation.&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&quot;preview-before-you-enable&quot;&gt;Preview before you enable&lt;/h2&gt;&lt;p&gt;Before you turn the scheduler on, you can preview upcoming rotations. This helps you answer questions like:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;“Which app will the agent be testing tomorrow at 09:00?”&lt;/li&gt;&lt;li&gt;“How long is each testing window with my current settings?”&lt;/li&gt;&lt;li&gt;“Does the rotation order match our priorities?”&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The preview is especially useful when you’re coordinating testing windows across multiple teams that share the same agent.&lt;/p&gt;&lt;h2 id=&quot;per-target-move-out-deadlines-optional&quot;&gt;Per‑target “move‑out” deadlines (optional)&lt;/h2&gt;&lt;p&gt;Some environments have hard constraints. For example, you might want the agent to leave production before business hours, or leave staging before a deployment window.&lt;/p&gt;&lt;p&gt;For each target environment in the rotation, you can optionally set a &lt;strong&gt;move‑out before&lt;/strong&gt; time (and an optional &lt;strong&gt;buffer&lt;/strong&gt; in minutes). When configured, AutoExplore will not schedule the next rotation &lt;em&gt;later than&lt;/em&gt; that deadline for that target.&lt;/p&gt;&lt;h2 id=&quot;practical-tips&quot;&gt;Practical tips&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Prefer longer windows: rotating too often can reduce the time the agent spends exploring deeper flows.&lt;/li&gt;&lt;li&gt;Use UTC intentionally: align the rotation plan with your teams’ working hours and release windows.&lt;/li&gt;&lt;li&gt;Monitor upcoming transitions from the agent pool: you can see when the next rotation is scheduled and which target is next.&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;when-to-use-the-agent-scheduler&quot;&gt;When to use the Agent Scheduler&lt;/h2&gt;&lt;p&gt;The scheduler is a good fit when:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;You have &lt;strong&gt;multiple smaller applications&lt;/strong&gt; that one agent can cover within a &lt;strong&gt;reasonable timeframe&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Some of your target environments aren’t running 24/7 and you want the scheduler to &lt;strong&gt;align testing windows&lt;/strong&gt; to reduce cost&lt;/li&gt;&lt;li&gt;You want to &lt;strong&gt;standardize testing windows&lt;/strong&gt; (e.g., nightly, mornings, weekends)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you need parallel testing (multiple apps at the same time), you’ll still want multiple agents. The scheduler focuses on &lt;strong&gt;sequential&lt;/strong&gt; sharing. Related: &lt;a href=&quot;https://www.autoexplore.ai/pages/blog/multiple_envs_multiple_agents/&quot; class=&quot;text-primary&quot;&gt;Multiple Environments Multiple Agents&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;br&gt;At AutoExplore, we are committed to helping R&amp;amp;D teams implement autonomous testing as part of their development processes. Ready to see what issues AutoExplore finds from your application? &lt;a href=&quot;https://outlook.office.com/book/AutoExploreMeeting@autoexplore.ai&quot; class=&quot;text-primary&quot; target=&quot;_blank&quot;&gt;Contact us for a demo&lt;/a&gt; to learn more.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>AutoExplore Security Scanning</title>
    <link href="https://www.autoexplore.ai/pages/blog/security_testing/" />
    <updated>2025-10-20T00:00:00Z</updated>
    <id>https://www.autoexplore.ai/pages/blog/security_testing/</id>
    <content type="html">&lt;h1 id=&quot;autoexplore-security-scanning&quot;&gt;AutoExplore Security Scanning&lt;/h1&gt;&lt;p&gt;Information security has always been a cat and mouse play. As the technology evolves, it also opens doors to new attack methods. Building secure software today requires more than end-to-end encryption. It needs continuous vigilance: patching known vulnerabilities, mitigating emerging exploits, and validating that web applications are configured securely.&lt;/p&gt;&lt;h2 id=&quot;a-different-way-to-scan&quot;&gt;A different Way to Scan&lt;/h2&gt;&lt;p&gt;AutoExplore’s latest update introduces an integrated security scanner that enhances web application testing by combining security analysis with intelligent exploration. All network traffic between the AutoExplore web browser and the target application is proxied through &lt;a href=&quot;https://github.com/zaproxy/zaproxy&quot;&gt;ZAP Proxy&lt;/a&gt;, an open-source security tool.&lt;/p&gt;&lt;p&gt;As the AutoExplore agent navigates the application like a real user, it discovers and scans parts of the user interface that traditional crawlers might miss. This approach enables deeper and more comprehensive security coverage.&lt;/p&gt;&lt;h2 id=&quot;detecting-security-misconfigurations&quot;&gt;Detecting Security Misconfigurations&lt;/h2&gt;&lt;p&gt;The scanner evaluates critical security response headers and configurations, such as:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Content Security Policy (CSP)&lt;/strong&gt; ensuring protections against cross-site scripting (XSS).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Server information headers&lt;/strong&gt; verifying that software version details aren’t exposed.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Cross-Origin and Site Isolation policies&lt;/strong&gt; checking for proper mitigation against Spectre-like vulnerabilities.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For example, missing or incorrect site isolation headers can make an application more vulnerable to data leaks between browser processes (e.g. Spectre attacks). These can often be mitigated by appending specific HTTP response headers or annotating HTML elements with attributes that guide browser behavior. Learn more on MDN: &lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cross-Origin-Embedder-Policy&quot;&gt;Cross-Origin-Embedder-Policy&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The scanner also highlights authentication and session management weaknesses, such as insecure cookies, missing SameSite flags, or session fixation risks.&lt;/p&gt;&lt;h2 id=&quot;reproducible-and-actionable-findings&quot;&gt;Reproducible and Actionable Findings&lt;/h2&gt;&lt;p&gt;Like all other issues in AutoExplore, every security observation includes a timeline view that captures the exact steps leading to the finding. This allows developers and security teams to easily reproduce and validate vulnerabilities.&lt;/p&gt;&lt;p&gt;Each issue is automatically assigned a risk level, helping teams prioritize effectively.&lt;/p&gt;&lt;h2 id=&quot;application-defense-is-only-as-strong-as-its-weakest-link&quot;&gt;Application defense is only as strong as its weakest link&lt;/h2&gt;&lt;p&gt;Unlike traditional crawlers, AutoExplore renders the web application in a real browser and uses machine learning models to detect interactive elements and dynamic states. This ensures comprehensive coverage — including hidden menus, modal dialogs, or authenticated pages that typical scanners might miss.&lt;/p&gt;&lt;h2 id=&quot;secure-by-design&quot;&gt;Secure by Design&lt;/h2&gt;&lt;p&gt;Importantly, AutoExplore’s security scanner performs non-destructive analysis — it inspects responses but &lt;strong&gt;does not&lt;/strong&gt; attempt to exploit or attack the target software. This makes it safe to use across different hosting environments.&lt;/p&gt;&lt;p&gt;Next, our focus shifts to improving reporting and navigation to make exploring findings even more intuitive.&lt;br&gt;&lt;br&gt;At AutoExplore, we are committed to helping R&amp;amp;D teams implement autonomous testing as part of their development processes. Ready to transform your process? &lt;a href=&quot;https://outlook.office.com/book/AutoExploreMeeting@autoexplore.ai&quot; class=&quot;text-primary&quot; target=&quot;_blank&quot;&gt;Contact us for a demo&lt;/a&gt; to learn more.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Accessibility Testing</title>
    <link href="https://www.autoexplore.ai/pages/blog/accessibility_testing/" />
    <updated>2025-10-07T00:00:00Z</updated>
    <id>https://www.autoexplore.ai/pages/blog/accessibility_testing/</id>
    <content type="html">&lt;h1 id=&quot;the-european-accessibility-act-2025&quot;&gt;The European Accessibility Act 2025&lt;/h1&gt;&lt;p&gt;On June 28, 2025, the European Accessibility Directive &lt;a href=&quot;https://eur-lex.europa.eu/eli/dir/2019/882/oj/eng&quot;&gt;EU Directive 2019/882&lt;/a&gt; came into effect. The European accessibility act requires minimum accessibility standards for a wide range of products and services. It is aimed to ensure that people with disabilities can use products and services.&lt;/p&gt;&lt;p&gt;While the legislation is aimed at people with disabilities, it also impacts software programs and tools. In the AI era, where task automation is becoming more common, it is important to ensure that your web application is accessible.&lt;/p&gt;&lt;h2 id=&quot;agents-and-tools&quot;&gt;Agents and Tools&lt;/h2&gt;&lt;p&gt;Screen readers and basic web crawlers which are integrated into LLM often rely on the accessibility tree provided by the web browser. To make your application accessible, you need to make sure that the accessibility tree is correct. W3C provides an &lt;a href=&quot;https://www.w3.org/WAI/standards-guidelines/&quot;&gt;Accessibility Standard&lt;/a&gt; to help in building accessible websites and web applications.&lt;/p&gt;&lt;p&gt;Accessibility tree is used to tell information about the page. Incorrect accessibility tree can cause the following issues:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Some part of the page is not &amp;quot;seen&amp;quot; by the assistive tool or agent. This can cause confusion or lose sales&lt;/li&gt;&lt;li&gt;Test automation tools may not be able to interact with the page&lt;/li&gt;&lt;li&gt;Some users may not be able to use the page and legal issues may arise&lt;/li&gt;&lt;li&gt;Search engines may have less visibility due to missing information&lt;/li&gt;&lt;li&gt;Bad user experience due to unclear or confusing UI, weird tab order, etc.&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;accessibility-tree&quot;&gt;Accessibility Tree&lt;/h2&gt;&lt;p&gt;You can access the accessibility tree in the browser developer tools. In FireFox you can open the accessibility tree by selecting &lt;code&gt;Accessibility&lt;/code&gt; tab from the developer tools. In Chromium-based browsers, you can open the accessibility panel from the &amp;quot;Elements&amp;quot; panel and changing the view by clicking the &amp;quot;Accessibility&amp;quot; button.&lt;/p&gt;&lt;div class=&quot;rounded-lg overflow-hidden&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://www.autoexplore.ai/img/ovN_cbove0-768.avif 768w, https://www.autoexplore.ai/img/ovN_cbove0-1536.avif 1536w, https://www.autoexplore.ai/img/ovN_cbove0-1976.avif 1976w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.autoexplore.ai/img/ovN_cbove0-768.webp 768w, https://www.autoexplore.ai/img/ovN_cbove0-1536.webp 1536w, https://www.autoexplore.ai/img/ovN_cbove0-1976.webp 1976w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;img src=&quot;https://www.autoexplore.ai/img/ovN_cbove0-768.png&quot; alt=&quot;How to access the accessibility tree in the browser developer tools&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1976&quot; height=&quot;741&quot; srcset=&quot;https://www.autoexplore.ai/img/ovN_cbove0-768.png 768w, https://www.autoexplore.ai/img/ovN_cbove0-1536.png 1536w, https://www.autoexplore.ai/img/ovN_cbove0-1976.png 1976w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;/picture&gt;&lt;/div&gt;&lt;p&gt;The browser accessibility tree view gives a quick look into the page and how it is structured and what information is available. You can also use FireFox accessibility tree for analyzing tab-order quickly.&lt;/p&gt;&lt;p&gt;There are also external tools that help you how to improve the accessibility of your web application during the development process.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://wave.webaim.org/extension/&quot;&gt;Wave&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.deque.com/axe/&quot;&gt;Axe&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://developers.google.com/web/tools/lighthouse&quot;&gt;Lighthouse&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You can integrate these tools into your browser for manual checks or playwright / cypress tests for tracking regressions.&lt;/p&gt;&lt;p&gt;One of the challenges with accessibility testing for modern web applications is that you always have to have the application in a specific state when scanning for accessibility issues. For example, to detect if your dropdown is accessible, you need to get the application into a state where the dropdown is visible, scan the application and then open the dropdown and scan again, then repeat this process for all the elements and pages.&lt;/p&gt;&lt;p&gt;In a recent AutoExplore update we added accessibility testing capabilities to our testing agent. This means when the agent browses the application, it is also continuously scanning for issues and reporting findings autonomously. It helps find edge cases that could be missed easily.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;br&gt;At AutoExplore, we are committed to helping R&amp;amp;D teams implement autonomous testing as part of their development processes. Ready to transform your process? &lt;a href=&quot;https://outlook.office.com/book/AutoExploreMeeting@autoexplore.ai&quot; class=&quot;text-primary&quot; target=&quot;_blank&quot;&gt;Contact us for a demo&lt;/a&gt; to learn more.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>null, undefined, NaN, [object Object]</title>
    <link href="https://www.autoexplore.ai/pages/blog/null_undefined_NaN_object_Object/" />
    <updated>2025-09-15T00:00:00Z</updated>
    <id>https://www.autoexplore.ai/pages/blog/null_undefined_NaN_object_Object/</id>
    <content type="html">&lt;h1 id=&quot;null-undefined-nan-object-object&quot;&gt;null, undefined, NaN, [object Object]&lt;/h1&gt;&lt;p&gt;One common mistake in Web development is to use the value of a variable or property that is not in the expected state. JavaScript has two bottom values: null and undefined. Due to the widespread use of JavaScript, it is common to see these values rendered in the UI. Most of the time, these values are not intended for the end user and can be confusing. The AutoExplore agent is now able to detect these values and highlight them in the reports.&lt;/p&gt;&lt;section class=&quot;bg-black py-12 my-12 flex justify-center container mx-auto sm:rounded-lg&quot;&gt;&lt;div class=&quot;container max-w-4xl mx-auto px-4&quot;&gt;&lt;div class=&quot;relative aspect-video w-full max-w-4xl mx-auto&quot;&gt;&lt;div class=&quot;youtube-embed&quot; data-video-id=&quot;heOTYXXJeqQ&quot;&gt;&lt;img src=&quot;https://i.ytimg.com/vi/heOTYXXJeqQ/maxresdefault.jpg&quot; alt=&quot;Null, Undefined, NaN, [object Object] video&quot; class=&quot;absolute w-full h-full object-cover&quot; loading=&quot;lazy&quot;&gt; &lt;button class=&quot;absolute inset-0 flex items-center justify-center bg-black/30 hover:bg-black/50 transition-colors&quot; aria-label=&quot;Play video&quot;&gt;&lt;svg class=&quot;w-20 h-20 text-white&quot; viewBox=&quot;0 0 68 48&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M66.52 7.74c-.78-2.93-2.49-5.41-5.42-6.19C55.79.13 34 0 34 0S12.21.13 6.9 1.55c-2.93.78-4.63 3.26-5.42 6.19C.06 13.05 0 24 0 24s.06 10.95 1.48 16.26c.78 2.93 2.49 5.41 5.42 6.19C12.21 47.87 34 48 34 48s21.79-.13 27.1-1.55c2.93-.78 4.64-3.26 5.42-6.19C67.94 34.95 68 24 68 24s-.06-10.95-1.48-16.26z&quot; fill=&quot;#f00&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M45 24L27 14v20&quot; fill=&quot;#fff&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;h2 id=&quot;root-cause&quot;&gt;Root cause&lt;/h2&gt;&lt;p&gt;The null value is used to represent the absence of a value. The undefined value is used to represent the value that is not yet defined.&lt;/p&gt;&lt;p&gt;Technically, these values end up in the UI due to a string interpolation where the read value is not defined. Before quickly rushing into a fix, it is crucial to understand the root cause of the issue. Rendering price as 0 is different from not having a price set.&lt;/p&gt;&lt;p&gt;NaN is a special value that represents a mathematical operation that cannot be performed. These values can end up in the UI due to incorrect calculations or invalid input values. When price is calculated and the formula contains an invalid value, the result is NaN.&lt;/p&gt;&lt;p&gt;[object Object] is a special value that represents an object. This value can end up in the UI when the developer expects a value or property to be a string, but the value is an object. It is common to see these values in the UI after library or API updates, something that used to be a string has been changed to an object.&lt;/p&gt;&lt;h2 id=&quot;detection&quot;&gt;Detection&lt;/h2&gt;&lt;p&gt;The AutoExplore agent is now able to detect these values and highlight them in the reports. &lt;code&gt;OnScreenError&lt;/code&gt; is the new error type used to categorize this type of issues. &lt;code&gt;OnScreenError&lt;/code&gt; also contains other error-looking texts from the UI other than just null, undefined, NaN and [object Object]. You can use the timeline view to see the exact steps the agent took for reproducing the issue. The final step highlights the value where it was detected.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;br&gt;At AutoExplore, we are committed to helping R&amp;amp;D teams implement autonomous testing as part of their development processes. Would you like to see what issues AutoExplore finds from your application? &lt;a href=&quot;https://outlook.office.com/book/AutoExploreMeeting@autoexplore.ai&quot; class=&quot;text-primary&quot; target=&quot;_blank&quot;&gt;Contact us for a demo&lt;/a&gt; to learn more.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Multiple Environments Multiple Agents</title>
    <link href="https://www.autoexplore.ai/pages/blog/multiple_envs_multiple_agents/" />
    <updated>2025-09-03T00:00:00Z</updated>
    <id>https://www.autoexplore.ai/pages/blog/multiple_envs_multiple_agents/</id>
    <content type="html">&lt;h1 id=&quot;multiple-environments-multiple-agents&quot;&gt;Multiple Environments Multiple Agents&lt;/h1&gt;&lt;p&gt;Since AutoExplore&#39;s recent update, it is possible to run multiple agents in parallel against multiple environments. This allows testing multiple versions of the application under test, for example, production and staging environments. It can also be used to speed up the testing process by running multiple agents against the same environment.&lt;/p&gt;&lt;section class=&quot;bg-black py-12 my-12 flex justify-center container mx-auto sm:rounded-lg&quot;&gt;&lt;div class=&quot;container max-w-4xl mx-auto px-4&quot;&gt;&lt;div class=&quot;relative aspect-video w-full max-w-4xl mx-auto youtube-embed&quot; data-video-id=&quot;Jkn5S3Brejg&quot;&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Jkn5S3Brejg/maxresdefault.jpg&quot; alt=&quot;Multiple Environments Multiple Agents video&quot; class=&quot;absolute w-full h-full object-cover&quot; loading=&quot;lazy&quot;&gt; &lt;button class=&quot;absolute inset-0 flex items-center justify-center bg-black/30 hover:bg-black/50 transition-colors&quot; aria-label=&quot;Play video&quot;&gt;&lt;svg class=&quot;w-20 h-20 text-white&quot; viewBox=&quot;0 0 68 48&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M66.52 7.74c-.78-2.93-2.49-5.41-5.42-6.19C55.79.13 34 0 34 0S12.21.13 6.9 1.55c-2.93.78-4.63 3.26-5.42 6.19C.06 13.05 0 24 0 24s.06 10.95 1.48 16.26c.78 2.93 2.49 5.41 5.42 6.19C12.21 47.87 34 48 34 48s21.79-.13 27.1-1.55c2.93-.78 4.64-3.26 5.42-6.19C67.94 34.95 68 24 68 24s-.06-10.95-1.48-16.26z&quot; fill=&quot;#f00&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M45 24L27 14v20&quot; fill=&quot;#fff&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;h2 id=&quot;multiple-target-software-environments&quot;&gt;Multiple Target Software Environments&lt;/h2&gt;&lt;p&gt;You can now create multiple Target Software Environments to better fit AutoExplore as part of your development workflow.&lt;/p&gt;&lt;p&gt;You can freely move the Agent between different Target Software Environments.&lt;/p&gt;&lt;p&gt;Having multiple target software environments allows different testing strategies, for example:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Test different hosting environments, (staging and production)&lt;/li&gt;&lt;li&gt;Test different versions of the application, (v1 and v2)&lt;/li&gt;&lt;li&gt;Test different configurations of the application, for example: with and without certain features enabled&lt;/li&gt;&lt;li&gt;Test different branches of the application, (main and develop)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You can also use multiple Target Software Environments to test different applications, e.g. Financial App and Shopping App. This is useful if you have multiple applications that you want to test with the same AutoExplore instance, however one AutoExplore Agent is able to test one Target Software Environment at a time&lt;/p&gt;&lt;h2 id=&quot;multiple-agents&quot;&gt;Multiple Agents&lt;/h2&gt;&lt;p&gt;To better support the extended Target Software Environments feature, we have also added support for multiple Agents. You can now purchase additional Agents in AutoExplore organization settings to enable multiple Agents in your organization. Each Agent can be assigned separately to selected Target Software Environment. Multiple Agents opens additional testing strategies:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Parallel testing of different Target Software Environments, (staging and production)&lt;/li&gt;&lt;li&gt;Simultaneous testing of same Target Software Environment with different user credentials, for example: admin and regular user&lt;/li&gt;&lt;li&gt;Testing integration between different applications, (Financial App and Shopping App)&lt;/li&gt;&lt;li&gt;Speed up testing by running multiple Agents against the same Target Software Environment&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br&gt;&lt;br&gt;At AutoExplore, we are committed to helping R&amp;amp;D teams implement autonomous testing as part of their development processes. Would you like to see what issues AutoExplore finds from your application? &lt;a href=&quot;https://outlook.office.com/book/AutoExploreMeeting@autoexplore.ai&quot; class=&quot;text-primary&quot; target=&quot;_blank&quot;&gt;Contact us for a demo&lt;/a&gt; to learn more.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>AutoExplore issue reporting</title>
    <link href="https://www.autoexplore.ai/pages/blog/autoexplore_reporting/" />
    <updated>2025-05-06T00:00:00Z</updated>
    <id>https://www.autoexplore.ai/pages/blog/autoexplore_reporting/</id>
    <content type="html">&lt;h1 id=&quot;autoexplore-issue-reporting&quot;&gt;AutoExplore issue reporting&lt;/h1&gt;&lt;p&gt;Autonomous testing without specified test cases creates a unique challenge for issue reporting. How to present the information about the found issues in a way that it is easy to understand and reproduce without overloading the user with too much information?&lt;/p&gt;&lt;h2 id=&quot;report-categories&quot;&gt;Report categories&lt;/h2&gt;&lt;p&gt;During test agent execution, the agent tests and analyzes many different aspects of the service under test in parallel. These analyzed aspects include HTML markup, network traffic, rendered user interface, application logs, and many more. As the agent executes, without breaks or pauses, it quickly generates a lot of information about the application.&lt;/p&gt;&lt;p&gt;The main reports view tries to help navigate this issue list by categorizing similar types of issues into groups.&lt;/p&gt;&lt;div class=&quot;rounded-lg overflow-hidden&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://www.autoexplore.ai/img/7xQ3edC72_-768.avif 768w, https://www.autoexplore.ai/img/7xQ3edC72_-1245.avif 1245w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.autoexplore.ai/img/7xQ3edC72_-768.webp 768w, https://www.autoexplore.ai/img/7xQ3edC72_-1245.webp 1245w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;img src=&quot;https://www.autoexplore.ai/img/7xQ3edC72_-768.png&quot; alt=&quot;Report categories&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1245&quot; height=&quot;800&quot; srcset=&quot;https://www.autoexplore.ai/img/7xQ3edC72_-768.png 768w, https://www.autoexplore.ai/img/7xQ3edC72_-1245.png 1245w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;/picture&gt;&lt;/div&gt;&lt;p&gt;These categories are&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Errors&lt;/strong&gt; Uncaught Javascript exceptions, failed http requests, error logs from browser console.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Audit&lt;/strong&gt; Browser audit results, form validation issues, client side validation etc.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt; Performance related audits, network traffic performance, page load times and slow Javascript code.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Deprecations&lt;/strong&gt; Deprecated API usage, deprecated HTML elements, deprecated CSS properties.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Accessibility&lt;/strong&gt; Accessibility issues, missing aria attributes, missing alt attributes, low text contrast etc.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt; Security issues, missing security headers, insecure http requests, insecure cookies.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;External&lt;/strong&gt; Issues detected outside the configured application domain.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Reasoning&lt;/strong&gt; LLM reasoning results from the service under test&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Other&lt;/strong&gt; Issues that do not fit into any of the above categories, for example: Agent getting stuck on a specific view.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Each category can then be opened in a separate view that shows a list of issues that belong to that category. The list of issues is again grouped by the similarity of the issue. This allows counting how many times a similar issue has occurred and when it was first and last seen. Finally, selecting a group opens a detailed view of the issue.&lt;/p&gt;&lt;div class=&quot;rounded-lg overflow-hidden&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://www.autoexplore.ai/img/N6qUqPZQm_-768.avif 768w, https://www.autoexplore.ai/img/N6qUqPZQm_-1324.avif 1324w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.autoexplore.ai/img/N6qUqPZQm_-768.webp 768w, https://www.autoexplore.ai/img/N6qUqPZQm_-1324.webp 1324w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;img src=&quot;https://www.autoexplore.ai/img/N6qUqPZQm_-768.png&quot; alt=&quot;Issue list&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1324&quot; height=&quot;446&quot; srcset=&quot;https://www.autoexplore.ai/img/N6qUqPZQm_-768.png 768w, https://www.autoexplore.ai/img/N6qUqPZQm_-1324.png 1324w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;/picture&gt;&lt;/div&gt;&lt;h2 id=&quot;detailed-view&quot;&gt;Detailed view&lt;/h2&gt;&lt;p&gt;The detailed view shows the lowest level of details about the reported issue. It allows navigating through different variations of the same issue. It is useful to better understand the scope of the issue. If, for example, the same error has occurred on multiple pages, it can be related to a certain widget or a user flow.&lt;/p&gt;&lt;p&gt;Below the occurrence navigation menu, there is a timeline view that shows what the agent did during the selected occurrence and what happened on the application before and after the issue occurred. Timeline view allows navigating the agent steps using screenshots from the application, as well as understanding network race conditions by seeing when the network request started and when it finished. Certain issues only occur when network requests finish in an unexpected order.&lt;/p&gt;&lt;p&gt;Following the agent steps in the timeline view can help to understand the issue better and reproduce it, the steps can be easily followed even without technical knowledge.&lt;/p&gt;&lt;div class=&quot;rounded-lg overflow-hidden&quot;&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://www.autoexplore.ai/img/ceG04bhg63-768.avif 768w, https://www.autoexplore.ai/img/ceG04bhg63-1322.avif 1322w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.autoexplore.ai/img/ceG04bhg63-768.webp 768w, https://www.autoexplore.ai/img/ceG04bhg63-1322.webp 1322w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;img src=&quot;https://www.autoexplore.ai/img/ceG04bhg63-768.png&quot; alt=&quot;Error detail&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1322&quot; height=&quot;831&quot; srcset=&quot;https://www.autoexplore.ai/img/ceG04bhg63-768.png 768w, https://www.autoexplore.ai/img/ceG04bhg63-1322.png 1322w&quot; sizes=&quot;(min-width: 1024px) 1536px, (min-width: 768px) 768px, 100vw&quot;&gt;&lt;/picture&gt;&lt;/div&gt;&lt;p&gt;Finally, the detailed view shows the information about the issue itself. This information varies depending on the type of issue.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;br&gt;At AutoExplore, we are committed to helping R&amp;amp;D teams implement autonomous testing as part of their development processes. Would you like to see what issues AutoExplore finds from your application? &lt;a href=&quot;https://outlook.office.com/book/AutoExploreMeeting@autoexplore.ai&quot; class=&quot;text-primary&quot; target=&quot;_blank&quot;&gt;Contact us for a demo&lt;/a&gt; to learn more.&lt;/p&gt;</content>
  </entry>
</feed>