Skip to content

Integration Guide ​

This guide explains how to design stable scenes and command arguments in your app so visual tests stay reliable.

Design scenes around user-observable states ​

Treat each scene as one meaningful UI state, for example:

  • Shell loaded
  • Authenticated dashboard
  • Settings open with known tab selected

Avoid mixing multiple transitions into one scene. Smaller scenes are easier to diagnose.

Use launch arguments to force deterministic state ​

Prefer app flags or test hooks that directly open the target state:

bash
my-app.exe --ui-test settings --seed 42 --disable-animations

Then wire these args in Watchlight project/scene settings.

Compose project and scene arguments intentionally ​

Recommended pattern:

  • Put global arguments in project settings (--seed, environment mode)
  • Put scene-specific arguments on scenes (--ui-test dashboard)
  • Enable argument prepend/merge behavior only when intentionally layering parent + child args

Pick the right capture trigger ​

Use Delay when startup timing is consistent and short.

Use StdOut pattern when readiness is event-based. Emit a stable marker from your app, for example:

text
WATCHLIGHT_READY:settings

Then configure scene capture to wait for that marker with a timeout.

For agent-driven loops, prefer readiness markers over fixed delays whenever the app can provide them. That reduces stale screenshots and gives the agent a reliable point to observe the UI.

Keep output stable ​

To reduce false positives:

  • Disable non-deterministic animation and clock widgets in test mode
  • Use fixed locale, font scaling, and window size
  • Use deterministic test data fixtures
  • Keep GPU/backend settings consistent across environments
  • Prefer app launch hooks that jump directly to the target state instead of navigating there manually
  • If possible, expose extra machine-readable state in test mode, such as current route, selected tab, focused element, or accessibility/tree metadata

Baselines and review flow ​

A practical workflow:

  1. Create/update baseline snapshots on a trusted environment
  2. Run routine checks in CI with headless JSON output
  3. Inspect failures and approve intentional UI changes by updating baselines

Watchlight treats each scene as baseline-vs-current:

  • the explicit baseline snapshot is used when configured
  • otherwise the first snapshot by name order is used as the effective baseline

That behavior is intentional for repeatable agent and CI loops.

Suggested CI contract ​

  • Input: versioned project file + deterministic app build
  • Process: watchlight run --strict --format json <project_path>
  • Output: pass/fail status + diff artifacts for review
  1. Inspect the project and scene configuration
  2. Validate the target scene launch/capture settings
  3. Run or re-analyze the target scene
  4. Fetch baseline/current/diff artifacts for inspection
  5. Apply code changes or update the baseline when the change is intentional
  6. Re-run in strict mode

Next: see Troubleshooting for common failure modes.

Watchlight Documentation