Notes from building QA Reef
Write-ups of the decisions behind the product, in enough detail to argue with. No filler, no fabricated case studies.
How to migrate from QA Wolf to self-hosted agentic QA
What genuinely carries over (your .flow.ts files, via QA Wolf's own Apache-2.0 CLI), what doesn't (the hosted grid, human verification), and the actual steps to move to a self-hosted, open-core alternative.
Making an API out of a 2004 web portal
The real technique behind turning a decades-old, frame-based, no-API portal into a callable endpoint: OCR words to coordinates, curved mouse movement, evidence per step, and UNMEASURED when a page never settles.
2026-08-29 · 8 min read PerspectiveWhat QA Wolf gets right — and what an open-core alternative changes
A sourced, non-disparaging look at what QA Wolf's platform genuinely gets right — hosted execution, human verification, mobile support — and what an open-core alternative changes about the trade-offs.
2026-08-29 · 8 min read ReferenceAgentic QA glossary: flows, mapping sessions, smoke suites, self-healing tests
Plain-English definitions for the terms this whole category throws around, with honest notes on where different tools use the same word differently.
2026-08-29 · 10 min read ArchitectureWhy we read the screen with OCR instead of trusting selectors
Selectors are the right answer once a UI is stable. A lot of the software worth testing isn't. Here's the actual failure mode that pushed us toward an OCR-driven operator, and where we still use plain Playwright locators instead.
2026-08-29 · 7 min read VerificationPASS / FAIL / UNMEASURED: why a QA verdict needs a third state
A binary pass/fail forces every ambiguous measurement into a lie. What UNMEASURED actually means, why it's not a hedge, and what it cost us the one time we didn't have it.
2026-08-29 · 6 min read Testing strategyDark controls: testing that a gate says no
Most test suites only check that the door opens for the right person. The harder, more valuable test is proving it stays shut for everyone else — and that "shut" isn't just "we didn't check."
2026-08-29 · 6 min read