Verification at the deploy choke point (Vercel / Netlify)
The strongest place to enforce verification is the moment code becomes a preview URL. Every deploy already produces one, and both Vercel and Netlify let a third party attach a check to it — pass/fail, shown on the PR, with no workflow file to write. That makes the non-developer story complete: the SDK is auto-injected by the build plugin, flows are minted from toolbar recordings with auto-proposed consequences, and verification runs at publish — without anyone writing a test.
Docs-only in v2.2.0. The pieces below all ship today (reticle verify exits 0/1 and persists a run artifact); what is not built is a hosted Reticle app that registers itself as a provider. Wire it with the CI recipe until that exists.
The shape
reticle verify <preview-url> is the whole integration surface:
- exits 0 when every saved flow passes, 1 otherwise — the only contract a check needs,
- prints a legible ✓/✗ report for the PR log,
- persists a
ReticleVerificationRunartifact (.reticle/runs/<id>.json) soreticle gateandreticle_run_exportcan consume the same verdict.
Recipe A — CI (works today, any provider)
localhost), Reticle injects reticle.connect() with a one-time token and allow-lists the preview origin — so the app does not need to be rebuilt per environment. Confirm the SDK actually runs on the deployed build: a production build that tree-shakes the dev-only SDK will connect to nothing, and verify will (correctly) fail with “no app connected.”
Recipe B — the Checks API pattern (what a hosted Reticle would do)
Both providers expose the same shape, which is why this is one integration rather than two:
The flow is: receive the deploy webhook →
reticle verify <target_url> → post the verdict (and the repair.failurePackets[] from the run artifact) back as the check output. The artifact is stable and versioned precisely so a host platform can render it without parsing logs.
Pair it with the local gate
The deploy check catches what reaches a preview.reticle gate catches it earlier — an agent that edits a covered file cannot “finish” without re-verifying:
gate in the agent’s Stop hook (see agent-cheatsheet), verify at the deploy. They read the same run artifacts, so a green gate locally and a green check on the PR mean the same thing.
Honest limits
verifyneeds one connected session. If several tabs of the app are open against the same daemon it refuses rather than guessing which to drive.- It replays flows sequentially against one tab, so flows must not depend on each other’s leftover state (a flow that logs in contaminates the next one). Author self-contained flows, or use
reticle_flow_verify { parallel }, which gives each flow an isolated context. - No saved flows means nothing to verify —
verifyfails rather than reporting a vacuous pass.