export type ShowcaseAssetPairCompositionCategory = "racing" | "platformer"; export type ShowcaseAssetPairCompositionCheckId = "binding-overlap" | "contact" | "camera-readability" | "scale-contract" | "debug-guide-absence"; export interface ShowcaseCompositionRect { readonly x: number; readonly y: number; readonly width: number; readonly height: number; } export interface ShowcaseAssetPairCompositionThresholds { readonly minBindingOverlapRatio: number; readonly maxContactOffsetRatio: number; readonly maxScreenContactDistanceRatio: number; readonly minPlaySpaceAreaRatio: number; readonly maxPlaySpaceAreaRatio: number; readonly minSubjectWorldRatio: number; readonly maxSubjectWorldRatio: number; readonly maxPlatformerScaleDelta: number; } export declare const SHOWCASE_ASSET_PAIR_COMPOSITION_THRESHOLDS: ShowcaseAssetPairCompositionThresholds; export interface ShowcaseAssetPairCompositionInput { readonly routeId: string; readonly category: ShowcaseAssetPairCompositionCategory; readonly screenshot: { readonly path: string; readonly sha256: string; readonly width: number; readonly height: number; readonly crop: ShowcaseCompositionRect; readonly foregroundBounds: ShowcaseCompositionRect; readonly foregroundClipped: boolean; readonly subjectBounds: ShowcaseCompositionRect; readonly subjectClipped: boolean; readonly projectedPlaySpaceBounds: ShowcaseCompositionRect; readonly projectedContactPoint: { readonly x: number; readonly y: number; }; readonly projectedSubjectHeight?: number; }; readonly assets: readonly { readonly id: string; readonly manifestHash: string; readonly evidenceHash: string; }[]; readonly geometry: { readonly report: string; readonly assetId: string; readonly assetHash: string; readonly source: string; readonly modelAnchorCount: number; }; readonly sceneBinding: { readonly assetHash: string; readonly geometryBinding: string; readonly overlay: string; readonly averageBindingError: number; readonly modelPresentationOffset: { readonly x: number; readonly y: number; readonly z: number; }; }; readonly contact: { readonly proven: boolean; readonly normalizedOffset: number; }; readonly camera: { readonly mode: string; readonly followsSubject: boolean; }; readonly scale: { readonly characterScaleRatio?: number; readonly projectedTargetHeight?: number; }; readonly debugGuidesAbsent: boolean; readonly freshnessFailures?: readonly string[]; readonly thresholds?: Partial; } export interface ShowcaseAssetPairCompositionCheck { readonly id: ShowcaseAssetPairCompositionCheckId; readonly verdict: "pass" | "fail"; readonly tolerance: Readonly>; readonly measured: Readonly>; readonly blockers: readonly string[]; } export interface ShowcaseAssetPairCompositionReport { readonly schema: "aura3d-showcase-asset-pair-composition/1.0"; readonly routeId: string; readonly category: ShowcaseAssetPairCompositionCategory; readonly verdict: "pass" | "fail"; readonly pass: boolean; readonly screenshot: { readonly path: string; readonly sha256: string; readonly width: number; readonly height: number; }; readonly geometry: ShowcaseAssetPairCompositionInput["geometry"]; readonly assets: ShowcaseAssetPairCompositionInput["assets"]; readonly thresholds: ShowcaseAssetPairCompositionThresholds; readonly checks: readonly ShowcaseAssetPairCompositionCheck[]; readonly blockers: readonly string[]; } export interface ValidateShowcaseAssetPairCompositionFromDiskOptions { readonly projectDir?: string; readonly routeId: string; readonly category: ShowcaseAssetPairCompositionCategory; readonly routePrimaryProbe: string; readonly gameplayProof: string; readonly geometryReport: string; readonly manifest?: string; readonly outputPath?: string; } export declare function validateShowcaseAssetPairComposition(input: ShowcaseAssetPairCompositionInput): ShowcaseAssetPairCompositionReport; export declare function validateShowcaseAssetPairCompositionFromDisk(options: ValidateShowcaseAssetPairCompositionFromDiskOptions): ShowcaseAssetPairCompositionReport; //# sourceMappingURL=showcase-spec-asset-pair-composition.d.ts.map