import { type VerifyResult } from '../verify/classify.js'; /** * How long to let the published game settle before observing it. * * Longer than `verify`'s default: the bundle is fetched from the CDN rather than a local dev * server, and a forged level pulls its .vwld and GLBs over the network too. */ export declare const SMOKE_SETTLE_MS = 25000; export interface SmokeCheckOptions { /** The URL `publish/complete` returned — the versioned key, which is what was just written. */ publishedUrl: string; /** Where console.log / screenshot.png land. */ artifactDir: string; settleMs?: number; /** The project, named to anyone queued behind this check's browser run (verify/lock.ts). */ root: string; /** Where the waiting line goes. */ log: (message: string) => void; } export interface SmokeCheckPaths { harnessPath: string; consolePath: string; screenshotPath: string; } export declare function smokeArtifactPaths(artifactDir: string): SmokeCheckPaths; /** * Load the just-published bundle the way the portal does, and classify what happened. * * Deliberately reuses `classifyVerifyRun` rather than defining a second notion of "the game * works": it already treats an untouched 300x150 canvas, a fatal engine console line, and a * blank-looking screenshot as failures — which between them cover every Phase 5 defect that * reached a published game. What this adds is the harness, not the verdict. * * The harness is written to `artifactDir` rather than a temp dir so a failing run leaves the exact * page behind: reproducing a smoke failure by hand is otherwise guesswork. */ export declare function runSmokeCheck(options: SmokeCheckOptions): Promise;