Skip to content
Menu

How it works

Jev: how QaReN judges phrase steps

When QaReN asks Jev to resolve a phrase or judge a check, what it can see, and how to run without a key.

Jev is QaReN's screen judge. QaReN asks it to resolve targets described in words and judge phrase checks against captured screen evidence. Quoted targets resolve locally; literal checks evaluate the screen text locally.

Which lines need Jev

Plan lineUses Jev?
Tap the tasks tabYes: a phrase target. Phrase press, fill, wait and scroll-until targets need Jev.
✓ The heading shows "Welcome" and no error is visibleYes: a phrase check. Text outside the quotes makes the whole expectation a phrase.
A line with a verb the grammar does not recognizeYes: an unrecognized verb requires Jev.
Tap "tab-tasks" or Wait for "Welcome" to appearNo: a quoted target. Prefer a testID over a label for action targets.
✓ "Welcome"No: a literal check, whose entire payload is one quoted string.
Recognized back, dialog and fixed-scroll stepsNo.

An unchanged saved block replays its stored identities without Jev for quoted targets and literal checks. Phrase checks still ask Jev. See the saved-block contract for replay eligibility and when a block walks again.

See Write a plan for the supported grammar.

Key and readiness

Set TYPESAFE_API_KEY in the environment that runs QaReN when the plan needs Jev. See environment variables. Plans that need Jev run a readiness probe before device selection or leasing; a missing or rejected key refuses JEV_UNREACHABLE. For probe ordering and model-free steps, follow the plan readiness contract.

A plan containing only quoted targets and literal checks needs no key. Without a key, that plan makes no Jev calls. With a key, interruption recovery may still ask Jev for a safety veto; the step recovery contract owns the guards and limits on that veto.

What Jev sees

Jev receives captured screen evidence and the plan's phrase; protected values use opaque identity tokens in model requests, while durable text uses •••. Runtime inputs default to SECRET, and a secure field promotes its runtime input to SECRET even if marked TEST-PII. Model-facing secure-field protection uses known-value masking, so an unknown pre-filled secret echoed as ordinary text can still reach Jev. See the input value masking contract and runtime-input contract for the protection rules and their limits, including separate media eligibility.

Receipts and timings

The receipt reports the run's verdict, failure and available artifact paths; the walk writes ledger.json and report.md when it reaches reporting. Each walked attempt row's timing.jevMs records judgment time within resolveMs, including HTTP retries and backoff; it overlaps the timing partition, so do not add it to total. The report prints speed summaries, while Watch a run displays step timings, including time spent asking Jev. See the walk timing contract for the fields and their limits.

Write a plan that needs no key

Quote every action target and make each check's entire payload one quoted string. Use visible labels and testIDs read from the app's source. The plugin's task example uses quoted targets and literal checks:

markdown
## QA

### Add a task

1. Tap "tab-tasks"
2. Tap "add-task"
3. Fill "task-title" with "Buy milk"
4. Tap "save-task"
5. Wait for "Buy milk" to appear
✓ "Buy milk"

This plan needs no TYPESAFE_API_KEY. Without one, it runs without Jev. Adding text outside a check's quoted payload makes it a phrase check and requires the key.

The CLI's plan and screen-evidence contract and the plugin's using-qaren skill are the sources for these plan-writing rules.

Edit this page on GitHub