# Outcome `'committed'`

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

A member of [`Outcome`](../api/Outcome.md) · stable · since 2.0.0

passed its commit point; irrevocable. `changed: false` when its result equalled the current state, so nothing was recorded.

## Where the declaration names it

- [`Animations.play`](../api/Animations.play.md): Outcome: 'committed' when it ends or holds its last frame; with `loop: true`, once it has started.
- [`AttachReport`](../api/AttachReport.md): Re-attaching a pair that is already connected and in place is an equal write: it resolves `attached: true` with that `connection`, `outcome: 'committed'`, `changed: false` and `seq: null`, and makes no undo step and no event (spec section 6.1, O15).
- [`Camera`](../api/Camera.md): Autocommit: resolves when the move ends (at rest); a newer view write takes over a move in progress, which then resolves 'committed', and so does a shopper's pointer or touch gesture ('camera:control-start'; a wheel is not one).
- [`Camera.set`](../api/Camera.set.md): Outcome: 'committed' when the move ends, or when a newer view write or a shopper's pointer or touch gesture ('camera:control-start'; not a wheel, which only changes the distance the move lands at) takes it over, so 'committed' does not say the view landed; through a `tx`, 'deferred'.
- [`ClipInfo`](../api/ClipInfo.md): A door or drawer button keeps that state itself: set it from 'animation:finished' (the end of its play's direction: the end, or frame 0 for a `reverse` play), never from `play`'s Promise, which also resolves 'committed' when a `stop` cuts the play short.
- [`DragOptions.commit`](../api/DragOptions.commit.md): A pending write that would change that pose or `at` but is superseded (spec section 6.1, O2c) passes the release to the write that superseded it, which releases the unit when it resolves 'committed', equal or not, so a store undo whose sync overtakes the drop's sync shows the scene model's pose.
- [`Events`](../api/Events.md): A payload may also predate a write you have since called: never merge a whole snapshot over newer app state (the [`setSceneModel`](../api/Writer.setSceneModel.md) example merges each commit's `patch` from 'committed', never its whole model).
- [`Events.scene-model:changed`](../api/Events.scene-model_changed.md): It is the whole model as of this commit, which can predate a newer document of yours ([`Cause.seq`](../api/Cause.seq.md)): a store that writes the model too merges only what each commit changed, 'committed''s `patch` (the [`setSceneModel`](../api/Writer.setSceneModel.md) sync example).
- [`Frame.camera`](../api/Frame.camera.md): A transient camera view for the frame being drawn: no commit, no 'committed' event, no undo step.
- [`HoloTransactionClosedError.closedBy`](../api/HoloTransactionClosedError.closedBy.md): 'threw': `work` threw; 'aborted': its signal aborted or `el` left the document; 'committed' for a savepoint's `sp` that staged.
- [`Overlays`](../api/Overlays.md): A call made inside `work` is never staged, joined or rolled back: a rollback or a supersede keeps the last call, which then shows over the old scene, so set overlays for a generated product after its write resolves 'committed'.
- [`PartState.outline`](../api/PartState.outline.md): To outline the product as a whole, as 1.x's highlight did (it resolved the hovered mesh to its model root), write it from your `'hover'` handler on the hovered part's model root ([`node(hit.part.node)`](../api/Writer.node.md)), or for a collection part on its collection's `root` (or its item, `part(key)`, when each item is a product), and only when that changes: 'hover' fires whenever the part under the pointer changes,…
- [`Session.beforeCommit`](../api/Session.beforeCommit.md): Not for: reacting after a commit, which is [`on('committed')`](../api/Session.on.md).
- [`Session.canTryOn`](../api/Session.canTryOn.md): Show a Try-on control only when `available`, and read it again on 'committed': the try-on rig belongs to the product's ModelNode.
- [`Session.capture`](../api/Session.capture.md): Throws HoloScopeError inside a [`beforeCommit`](../api/Session.beforeCommit.md) function: it would wait for that function's own commit (spec section 6.1, O3); capture on 'committed' or after the write's Promise.
- [`Session.idle`](../api/Session.idle.md): Each of these settles exactly when its write has landed: - one write: its own Promise, at its commit point, its loads included; a camera move, a clip or a `durationMs` tween resolves when it finishes ('superseded': a newer write won); - the newest of a burst (a slider, fast swatch clicks): abort the older write's `signal` when a new one starts, and await the newest; never debounce to let the…
- [`Session.redo`](../api/Session.redo.md): As `undo`: in the write queue; ends an open group at its call; always moves the history pointer, except on 'rolled-back' / 'internal-error'; 'committed', or 'refused' with reason 'empty'.
- [`Session.transaction`](../api/Session.transaction.md): - A transaction whose result equals the current state commits nothing ('committed', `changed: false`); its deferred camera moves and clips still start, at the next drawn frame.
- [`Session.undo`](../api/Session.undo.md): Outcome: 'committed', or 'refused' with reason 'empty'.
- [`Writer.applyPatch`](../api/Writer.applyPatch.md): Outcome: 'committed' at its commit point, after its loads; through a `tx`, 'staged' once the assets it names have loaded (a node it enables, a new `glbUrl`).
- [`Writer.select`](../api/Writer.select.md): Outcome: 'committed' at its commit point, after its loads; through a `tx`, 'staged' once the assets it names have loaded (asset failures: `problems`).
- [`Writer.setSceneModel`](../api/Writer.setSceneModel.md): Outcome: 'committed' at its commit point, after its loads; through a `tx`, 'staged' once loaded; 'rolled-back' with reason 'internal-error' when applying it failed inside the runtime (through a `tx`, it then rejects AbortError and the transaction resolves 'rolled-back'; spec section 6.4).

The set is open: handle a code you don't know (`'other'`).
