import type { MobileOrientation, PlatformDeclaration } from '../project/platform-declaration.js'; export type VerifyPlatform = 'desktop' | 'mobile'; /** What `--platform` accepts. `both` is a request for two runs, not a platform. */ export type PlatformRequest = 'desktop' | 'mobile' | 'both'; export interface ResolvedPlatforms { /** * The platforms to run, in order. `platforms[0]` is the LEAD: the run whose observations land * at the top level of `result.json`, which is what `bitmagic judge` summarises and what the * one-line run state reports. A `both` run leads with the platform the game is FOR, so the * headline numbers describe the game as it is meant to be played; the other run is in * `platforms[]`. Artifact names are per platform, never per lead, so this ordering never moves * a file. */ platforms: VerifyPlatform[]; /** How to orient a mobile run. Portrait unless world.json locks the game to landscape. */ orientation: MobileOrientation; /** * The project declares itself mobile-primary. This is what turns a mobile-parity gap from a * warning into a failure: an action a phone cannot reach is a broken game when the phone is * the platform. */ mobilePrimary: boolean; /** One line for the creator naming what will run and why it was chosen. */ note: string; /** Values the declaration carried that could not be used, and what was done instead. */ warnings: string[]; } /** * Validate `--platform`, or undefined when it was not passed. Mirrors `parseRendererArg` — an * unrecognised value is a mistake worth stopping for, not something to silently default. */ export declare function parsePlatformArg(raw: string | undefined): PlatformRequest | undefined; export declare function resolveVerifyPlatforms(requested: PlatformRequest | undefined, declaration: PlatformDeclaration): ResolvedPlatforms; /** * Validate `bitmagic judge --platform`. No `both`: the judge sends ONE frame and returns one * scorecard, and a verdict averaged over two screens would be a verdict about neither. */ export declare function parseJudgePlatformArg(raw: string | undefined): VerifyPlatform | undefined; /** * Which frame `bitmagic judge` grades. * * Explicit wins. Otherwise mobile, but only when BOTH halves hold: the game says it is a phone * game, and a phone frame actually exists. Requiring the file is what keeps the auto-default from * becoming a dead end — a mobile-primary project whose last verify was `--platform desktop` gets * its desktop frame graded rather than an error about a screenshot nobody asked for. */ export declare function resolveJudgePlatform(explicit: VerifyPlatform | undefined, declaration: PlatformDeclaration, mobileScreenshotExists: boolean): VerifyPlatform;