Blog

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.

Migration

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.

2026-08-29 · 4 min read
Technique

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
Perspective

What 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
Reference

Agentic 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
Architecture

Why 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
Verification

PASS / 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 strategy

Dark 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