# `InfoReport`

> Contract 2.0.0 · package sha256 `a857eca95b35921109faf997094bb4192f12527d9d0fcd4be7e97f06425bad6e` · generated from `configurator-runtime.d.ts` by `services/onsite-scripter/scripts/build-contract-docs.mjs`; edit the source, not this file.

Interface · `import type { InfoReport } from '@holostep-configurators/runtime-client/contract';` · stable · since 2.0.0 · section 19. Info and capabilities

A diagnostic snapshot ([`session.info()`](Session.info.md)). Safe to log or send with a bug report.

## Members

| Member | Kind | Summary |
| --- | --- | --- |
| <a id="contract"></a>[`contract`](InfoReport.contract.md) | property | This runtime's contract ([`RUNTIME_CONTRACT`](RUNTIME_CONTRACT.md)). |
| <a id="runtime"></a>[`runtime`](InfoReport.runtime.md) | property | `version`: [`RUNTIME_VERSION`](RUNTIME_VERSION.md). |
| <a id="renderer"></a>[`renderer`](InfoReport.renderer.md) | property | The renderer on this device. |
| <a id="device"></a>[`device`](InfoReport.device.md) | property | `maxTextureSize`: the largest texture side this device takes, pixels. |
| <a id="scene"></a>[`scene`](InfoReport.scene.md) | property · labs | What the last drawn frame cost, for checking a scene against a phone budget. |
| <a id="ar"></a>[`ar`](InfoReport.ar.md) | property | AR on this device for this account: read it before showing an AR control. |
| <a id="document"></a>[`document`](InfoReport.document.md) | property | The viewer document's layers and the last apply. |
| <a id="problems"></a>[`problems`](InfoReport.problems.md) | property | This session's recent Problems, oldest first: the last 50 of any code, plus the last 20 'asset-failed', 'sync-failed' and 'render-lost' entries even when older, so budget codes never push those out. |
| <a id="session"></a>[`session`](InfoReport.session.md) | property | `id`: this session's id; `bootMs`: how long [`boot`](boot.md) took, ms. |

## Declaration

```ts
export interface InfoReport {
  readonly contract: RuntimeContract;
  readonly runtime: {
    readonly version: string;
  };
  readonly renderer: {
    readonly backend: 'webgl2' | 'webgpu' | 'other';
    readonly engineConflict: boolean;
    readonly tier: 'low' | 'medium' | 'high' | 'other';
    readonly limits: {
      readonly linkedLights: number;
    };
  };
  readonly device: {
    readonly maxTextureSize: number;
  };
  readonly scene: {
    readonly triangles: number;
    readonly drawCalls: number;
    readonly geometries: number;
    readonly textures: number;
    readonly programs: number;
  };
  readonly ar: {
    readonly enabled: boolean;
    readonly modes: ReadonlyArray<'scene-viewer' | 'quick-look' | 'webxr' | 'other'>;
    readonly fileModes: ReadonlyArray<'scene-viewer' | 'quick-look' | 'other'>;
    readonly pending: boolean;
  };
  readonly document: {
    readonly layers: readonly string[];
    readonly lastReport: ApplyReport | null;
  };
  readonly problems: readonly Problem[];
  readonly session: {
    readonly id: string;
    readonly accountId: number;
    readonly configuratorId: string | null;
    readonly bootMs: number;
  };
}
```

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `InfoReport` names no product |
| 2. A precedent | not recorded: no ledger row (coverage.json) names this member or its owner |
| 3. Two apps, or labs | pass: 4 apps (fleet cross-check: app-b362a81c85, app-f9a32142f1, app-fc07850558, app-fd09090420) |
| 4. The cheaper fix first | not recorded per member (Appendix B decides it per need) |
