master
John Lauer docs/contract: golden fixtures recorded from the Node build 2.0.399 for the Rust port 71c0e87 1mo ago
{
  "_hint": "Drives the active tab to url and waits for load. Verify with a screenshot before asserting success.",
  "_next": [
    "pup_screenshot {} — screenshot YOUR window (no ids: pup resolves your --ai-thread name to your window)",
    "pup_reload {} — reload it (e.g. after you publish or rebuild something it shows)",
    "pup_my_windows {} — full state of everything your thread owns: windows, tabs, urls, titles",
    "pup_open_window {\"url\":\"...\"} — another page = another TAB in your same window",
    "pup_raise_os_window {\"foregroundReason\":\"...\"} — bring it onto the user's screen (gated)",
    "Windows open MAXIMIZED already. NEVER hunt hwnds (desktop_find_window / desktop_set_window_state) for a pup window — pup verbs already know your window.",
    "pup_screenshot {} captures the PAGE (CDP, pixel-perfect, works in background — the shot you want 99% of the time). Only when you need the browser CHROME in frame (tab strip, toolbar icons): pup_window_info {} hands you this window's hwnd for desktop_screenshot_window — no searching, ever."
  ],
  "_verifyRender": "VERIFY WHAT YOU JUST PUT ON SCREEN — do not assume it rendered. ok:true means the NAVIGATION succeeded; it says NOTHING about whether the page actually painted. Take a screenshot and READ the image: `adom-bridge-cli --ai-thread \"<your thread>\" pup_screenshot {\"sessionId\":\"contract-fx\"}` — it returns a real PNG path you can open. Look for: a blank or white page, an unstyled flash of plain HTML (CSS never loaded), a stack trace or framework error overlay, missing images, a broken or overlapping layout, content cut off past the fold, a dev-server \"Cannot GET /\" page, or the wrong build entirely. If it is wrong: fix the source, `pup_reload`, and screenshot AGAIN — ralph-test that loop until the render is genuinely correct, rather than reporting success after one open. If the viewport is too small to judge, pup_set_viewport first; for a long page use pup_screenshot {fullPage:true}. Showing the user a screenshot of their own working app is also the fastest way to prove it works.",
  "aiThread": "pup-bridge",
  "durationMs": 235,
  "ok": true,
  "pitfalls": [
    "navigation can race SPA routing — confirm with pup_screenshot",
    "some sites need pup_wait for a selector after navigate"
  ],
  "related": [
    "pup_screenshot",
    "pup_wait",
    "pup_reload"
  ],
  "renderCheck": {
    "bodyChars": 129,
    "elements": 5,
    "httpStatus": 200,
    "ok": true,
    "signals": [],
    "title": "Example Domain"
  },
  "sessionId": "contract-fx",
  "status": "ok",
  "tabId": "tab-1",
  "url": "https://example.com/?nav=1",
  "window": "contract-fx"
}