# `testing.FakeModel`

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

Interface · `import type { FakeModel } from '@holostep-configurators/runtime-client/testing';` · stable · since 2.0.0 · section 24. /testing

A GLB as the fake knows it: its node tree, connectors, manifest, clips and load behaviour.

## Members

| Member | Kind | Summary |
| --- | --- | --- |
| <a id="nodes"></a>[`nodes`](testing.FakeModel.nodes.md) | property | Declared node tree of a GLB (names, ids, tags, slots, joints, local bounds). |
| <a id="connectors"></a>[`connectors?`](testing.FakeModel.connectors.md) | property | The GLB's connector planes in its local frame, as the manifest lists them. |
| <a id="manifest"></a>[`manifest?`](testing.FakeModel.manifest.md) | property | What [`describe(node).manifest`](ModelDescription.manifest.md) returns. |
| <a id="variants"></a>[`variants?`](testing.FakeModel.variants.md) | property · labs | The GLB's KHR_materials_variants names, as the runtime reads them from the loaded file, stamped or not: a [`MaterialSpec.variant`](MaterialSpec.variant.md) this list lacks records 'unsupported-spec' at 'patch.material.variant', as on the runtime. |
| <a id="clips"></a>[`clips?`](testing.FakeModel.clips.md) | property | Clip names, lengths and animated nodes, for `animations`. |
| <a id="load"></a>[`load?`](testing.FakeModel.load.md) | property | Simulated load: time and outcome. |

## Declaration

```ts
export interface FakeModel {
  nodes: ReadonlyArray<{
    name: string;
    id?: string;
    parent?: string | null;
    mesh?: boolean;
    tags?: string[];
    slot?: string;
    joint?: boolean;
    bounds?: {
      min: {
        x: number;
        y: number;
        z: number;
      };
      max: {
        x: number;
        y: number;
        z: number;
      };
    };
    doubleSided?: boolean;
    uvChannels?: number[];
    material?: Pick<MaterialSpec, 'baseColor' | 'metallic' | 'roughness' | 'alpha' | 'alphaMode' | 'alphaCutoff' | 'side' | 'emissive' | 'emissiveStrength'>;
  }>;
  connectors?: readonly ManifestConnector[];
  manifest?: AssetManifest;
  variants?: readonly string[];
  clips?: ReadonlyArray<{
    name: string;
    durationMs: number;
    nodes?: readonly string[];
  }>;
  load?: {
    ms?: number;
    fail?: boolean;
    progressEveryMs?: number;
  };
}
```

## Generic-API test (spec 3.1)

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