# `InputErrorCode`

> 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.

Type · `import type { InputErrorCode } from '@holostep-configurators/runtime-client/contract';` · stable · since 2.0.0 · section 3. Errors

What a HoloInputError reports. A code newer than the page's `contract` reaches it as 'other'
(spec section 3.6). Each code has a docs page.

## Input-error codes

| Code | Summary |
| --- | --- |
| [`'invalid-input'`](../input-errors/invalid-input.md) | A value or combination the member refuses, e.g. a zero [`PoseInput.scale`](PoseInput.md) component. |
| [`'missing-node-id'`](../input-errors/missing-node-id.md) | A node without a `nodeId` (spec section 6.9, ID9). |
| [`'duplicate-node-id'`](../input-errors/duplicate-node-id.md) | Two nodes share a `nodeId` (ID9); [`normalizeNodeIds`](normalizeNodeIds.md) repairs an old save. |
| [`'rotation-twice'`](../input-errors/rotation-twice.md) | An untyped pose or patch with both rotations, `rotationDeg` and `quaternion`. |
| [`'unknown-field'`](../input-errors/unknown-field.md) | A field the spec or schema of the page's declared `contract` doesn't have, or an [`applyPatch`](Writer.applyPatch.md) node field path whose field the stored node format doesn't have and the node doesn't carry; `didYouMean` names close fields. |
| [`'unknown-id'`](../input-errors/unknown-id.md) | An id that names nothing the member takes, e.g. a [`select`](Writer.select.md) group that is no global-material GroupNode, a view not in [`camera.views`](Camera.views.md), an [`ImageRef`](ImageRef.md) or [`ShapeRef`](ShapeRef.md) that is not live, a `{ materialId }` that names no material, an [`applyPatch`](Writer.applyPatch.md) `defaultNodeId` that names no child of its node, or a [`describe(node)`](Session.describe.md) id that names no ModelNode; `didYouMean` names known ids. |
| [`'option-in-transaction'`](../input-errors/option-in-transaction.md) | A commit option passed through a `tx` by an untyped call; always thrown at the call. |
| [`'collection-role-mismatch'`](../input-errors/collection-role-mismatch.md) | [`collection()`](Writer.collection.md) on a live name with another role. |
| [`'collection-options-mismatch'`](../input-errors/collection-options-mismatch.md) | [`collection()`](Writer.collection.md) on a live name with another `attachTo`. |
| [`'duplicate-rule-id'`](../input-errors/duplicate-rule-id.md) | Two rules of one [`apply()`](Writer.apply.md) `rules` list share an id (spec section 6.10, R3). |
| [`'checkpoint-rejected'`](../input-errors/checkpoint-rejected.md) | Page state over 256 KB of canonical JSON ([`CheckpointOption`](CheckpointOption.md)). |
| [`'capture-displayed-fixed'`](../input-errors/capture-displayed-fixed.md) | `source: 'displayed'` with a `view`, `size`, `pixelRatio` or a `background` other than 'scene'. |
| [`'not-draggable'`](../input-errors/not-draggable.md) | `startDrag` on a unit that no live registration names. |

The set is open: a code newer than your declared contract arrives as `'other'`.

## Declaration

```ts
export type InputErrorCode = 'invalid-input' | 'missing-node-id' | 'duplicate-node-id' | 'rotation-twice' | 'unknown-field' | 'unknown-id' | 'option-in-transaction' | 'collection-role-mismatch' | 'collection-options-mismatch' | 'duplicate-rule-id' | 'checkpoint-rejected' | 'capture-displayed-fixed' | 'not-draggable' | 'other';
```

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `InputErrorCode` 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) |
