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
QA Wolf's own CLI runs your .flow.ts files offline with no API key. We verified it, which turns the migration into three replacement projects, not a rescue.
Making an API out of a 2004 web portal
We pulled 14,753 records out of a county Laserfiche portal by calling the three HTTP requests behind its viewer. The pagination lie, the session wedge, and why the browser is a debugger, not a runtime.
2026-08-29 · 4 min read PerspectiveWhat QA Wolf gets right, and what an open-core alternative changes
Their real product is the grid plus the humans. Open-core changes who owns the tests, gives every model decision a price tag, and gives ambiguity its own verdict.
2026-08-29 · 3 min read ReferenceAgentic QA glossary: flows, mapping sessions, smoke suites, self-healing tests
The vocabulary as we use it, with sources where QA Wolf means something different, and the refusal rules that keep "Delete" from healing to "Delete all."
2026-08-29 · 4 min read ArchitectureWhy we read the screen with OCR instead of trusting selectors
Tiling one screenshot took OCR from 2 recovered lines to 34. Measured recall: 86 to 100 percent. The rule that matters: OCR clicks, the DOM reads. On no-DOM pages the agent now designs the flow around OCR anchors.
2026-08-29 · 3 min read VerificationPASS / FAIL / UNMEASURED: why a QA verdict needs a third state
Our checks said a fix was live for three hours. It wasn't; they shared a blind spot. Why a measurement you can't trust must never impersonate a pass or a fail.
2026-08-29 · 4 min read Testing strategyDark controls: testing that a gate says no
We ship a flow that must fail and a fixture our guards must flag. A gate that has only ever said yes is not a gate.
2026-08-29 · 3 min read