<!-- GENERATED FILE: do not edit by hand. --> <!-- Regenerate with npm run gen-docs. -->
Sources: packages/script-codegen/src/scriptEffectContracts.ts, packages/script-nodes/src/index.ts.
Script Effect Contracts
This generated snapshot is derived from the canonical Script IR node catalog and the Script Effect Contract builder. It describes host effects, runtime pending-op receipt mappings, and the typed gameplay state scopes projected to AI, MCP, SDK, frontend, and Platform Catalog surfaces.
Contract version: script-effect-contract.v1. Typed gameplay state version: typed-gameplay-state.v1. Catalog hash: sha256:bf9264aeb340b64315a49c30a14a8edbbf73233e7879e8543efc0fa210605795. Host effect contracts: 83. Runtime pending-op mappings: 37. Effect tags: pure, readWorld, writeWorld, readState, writeState, emitEvent, spawnEntity, despawnEntity, physicsCommand, uiEffect, audioEffect, platformRequest, networked, durable, nonRollbackable, requiresAuthority. Typed gameplay state scopes: entity, script_instance, room, match, player, team, global, persisted_player, persisted_project.
Host Effects
| Host | Node | Effect | Effect tags | Authority | State scope | Persistence | Replication | Runtime receipts | Approval |
|---|---|---|---|---|---|---|---|---|---|
Audio.play | host.audio.play | runtime_command | audioEffect<br>nonRollbackable | runtime_room | player | ephemeral | public_projection | RuntimeAudioCueQueued<br>RuntimeAudioStopped<br>RuntimeAudioVolumeSet<br>RuntimeBackgroundMusicSet | no |
Audio.playSpatial | host.audio.play_spatial | runtime_command | audioEffect<br>nonRollbackable | runtime_room | player | ephemeral | public_projection | RuntimeAudioCueQueued<br>RuntimeAudioStopped<br>RuntimeAudioVolumeSet<br>RuntimeBackgroundMusicSet | no |
Audio.setBackgroundMusic | host.audio.set_background_music | runtime_command | audioEffect<br>nonRollbackable | runtime_room | player | ephemeral | public_projection | RuntimeAudioCueQueued<br>RuntimeAudioStopped<br>RuntimeAudioVolumeSet<br>RuntimeBackgroundMusicSet | no |
Audio.setVolume | host.audio.set_volume | runtime_command | audioEffect | runtime_room | player | ephemeral | public_projection | RuntimeAudioCueQueued<br>RuntimeAudioStopped<br>RuntimeAudioVolumeSet<br>RuntimeBackgroundMusicSet | no |
Audio.stop | host.audio.stop | runtime_command | audioEffect | runtime_room | player | ephemeral | public_projection | RuntimeAudioCueQueued<br>RuntimeAudioStopped<br>RuntimeAudioVolumeSet<br>RuntimeBackgroundMusicSet | no |
Camera.addLookInput | host.camera.add_look_input | runtime_command | platformRequest<br>nonRollbackable<br>requiresAuthority | runtime_room | player | ephemeral | public_projection | RuntimePlatformRequestQueued | yes |
Camera.setLookSensitivity | host.camera.set_look_sensitivity | runtime_command | platformRequest<br>nonRollbackable<br>requiresAuthority | runtime_room | player | ephemeral | public_projection | RuntimePlatformRequestQueued | yes |
Camera.setPitchClamp | host.camera.set_pitch_clamp | runtime_command | platformRequest<br>nonRollbackable<br>requiresAuthority | runtime_room | player | ephemeral | public_projection | RuntimePlatformRequestQueued | yes |
Camera.setViewTarget | host.camera.set_view_target | runtime_command | platformRequest<br>nonRollbackable<br>requiresAuthority | runtime_room | player | ephemeral | public_projection | RuntimePlatformRequestQueued | yes |
Debug.log | host.debug.log | runtime_command | emitEvent | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptLog | no |
Entity.addComponent | host.entity.add_component | state_write | writeWorld<br>writeState<br>requiresAuthority | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.ancestors | host.entity.ancestors | read | readWorld<br>readState | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.children | host.entity.children | read | readWorld<br>readState | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.descendants | host.entity.descendants | read | readWorld<br>readState | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.detach | host.entity.detach | state_write | writeWorld<br>writeState<br>requiresAuthority | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.hasTag | host.entity.has_tag | read | readWorld<br>readState | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.parent | host.entity.parent | read | readWorld<br>readState | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.patchComponent | host.entity.patch_component | state_write | writeWorld<br>writeState<br>requiresAuthority | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.readComponent | host.entity.read_component | read | readWorld<br>readState | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.removeComponent | host.entity.remove_component | state_write | writeWorld<br>writeState<br>requiresAuthority | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.removeTag | host.entity.remove_tag | state_write | writeWorld<br>writeState<br>requiresAuthority | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.replaceComponent | host.entity.replace_component | state_write | writeWorld<br>writeState<br>requiresAuthority | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.setName | host.entity.set_name | state_write | writeWorld<br>writeState<br>requiresAuthority | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.setParent | host.entity.set_parent | state_write | writeWorld<br>writeState<br>requiresAuthority | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Entity.setTag | host.entity.set_tag | state_write | writeWorld<br>writeState<br>requiresAuthority | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
Events.emit | host.events.emit | runtime_command | emitEvent | runtime_room | room | ephemeral | room | RuntimeCustomEventEmitted | no |
Match.addScore | host.match.add_score | runtime_command | writeState<br>emitEvent<br>requiresAuthority | runtime_room | match | session | room | RuntimeScriptScoreAddRequested | no |
Match.getScore | host.match.get_score | read | readState | runtime_room | match | session | room | RuntimeScriptPendingOpDrained | no |
Match.getState | host.match.get_state | read | readState | runtime_room | match | session | room | RuntimeScriptPendingOpDrained | no |
Match.patchObjective | host.match.patch_objective | runtime_command | writeState<br>emitEvent<br>requiresAuthority | runtime_room | match | session | room | RuntimeScriptObjectivePatchRequested | no |
Match.setPhase | host.match.set_phase | runtime_command | writeState<br>emitEvent<br>requiresAuthority | runtime_room | match | session | room | RuntimeScriptMatchPhaseRequested<br>RuntimeScriptWinStateSet | no |
Navigation.findPath | host.navigation.find_path | read | readWorld | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Navigation.isReachable | host.navigation.is_reachable | read | readWorld | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Navigation.nearestPoint | host.navigation.nearest_point | read | readWorld | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Navigation.raycast | host.navigation.raycast | read | readWorld | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Navigation.steerToward | host.navigation.steer_toward | read | readWorld | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Network.sendMessage | host.network.send_message | runtime_command | emitEvent<br>networked<br>nonRollbackable | runtime_room | room | ephemeral | room | RuntimeNetworkMessageSent | no |
Physics.command | host.physics.command | runtime_command | writeWorld<br>physicsCommand<br>requiresAuthority | runtime_room | entity | session | room | RuntimePhysicsForceQueued<br>RuntimePhysicsImpulseQueued<br>RuntimePhysicsVelocityQueued | no |
Physics.occupancyQuery | host.physics.occupancy_query | read | readWorld | runtime_room | entity | session | room | RuntimePhysicsForceQueued<br>RuntimePhysicsImpulseQueued<br>RuntimePhysicsVelocityQueued | no |
Physics.overlapTest | host.physics.overlap_test | read | readWorld | runtime_room | entity | session | room | RuntimePhysicsForceQueued<br>RuntimePhysicsImpulseQueued<br>RuntimePhysicsVelocityQueued | no |
Physics.shapecast | host.physics.shapecast | read | readWorld | runtime_room | entity | session | room | RuntimePhysicsForceQueued<br>RuntimePhysicsImpulseQueued<br>RuntimePhysicsVelocityQueued | no |
Platform.exitFullscreen | host.platform.exit_fullscreen | runtime_command | platformRequest<br>nonRollbackable<br>requiresAuthority | runtime_room | player | ephemeral | public_projection | RuntimePlatformRequestQueued | yes |
Platform.exitPointerLock | host.platform.exit_pointer_lock | runtime_command | platformRequest<br>nonRollbackable<br>requiresAuthority | runtime_room | player | ephemeral | public_projection | RuntimePlatformRequestQueued | yes |
Platform.requestFullscreen | host.platform.request_fullscreen | runtime_command | platformRequest<br>nonRollbackable<br>requiresAuthority | runtime_room | player | ephemeral | public_projection | RuntimePlatformRequestQueued | yes |
Platform.requestPointerLock | host.platform.request_pointer_lock | runtime_command | platformRequest<br>nonRollbackable<br>requiresAuthority | runtime_room | player | ephemeral | public_projection | RuntimePlatformRequestQueued | yes |
Random.bool | host.random.bool | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Random.gaussian | host.random.gaussian | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Random.int | host.random.int | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Random.next | host.random.next | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Random.pick | host.random.pick | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Random.pointInCircle | host.random.point_in_circle | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Random.pointInSphere | host.random.point_in_sphere | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Random.range | host.random.range | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Random.seeded | host.random.seeded | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Random.shuffle | host.random.shuffle | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Random.sign | host.random.sign | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Random.unitVector | host.random.unit_vector | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Random.weightedPick | host.random.weighted_pick | read | pure | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Room.getState | host.room.get_state | read | readWorld<br>readState | runtime_room | room | session | room | RuntimeScriptPendingOpDrained | no |
Team.getAssignment | host.team.get_assignment | read | readWorld<br>readState | runtime_room | team | session | team | RuntimeScriptPendingOpDrained | no |
Terrain.heightAt | host.terrain.height_at | read | readWorld | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Terrain.normalAt | host.terrain.normal_at | read | readWorld | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Terrain.raycastDown | host.terrain.raycast_down | read | readWorld | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Terrain.sampleLayerWeights | host.terrain.sample_layer_weights | read | readWorld | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Terrain.slopeAt | host.terrain.slope_at | read | readWorld | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
UI.closePanel | host.ui.close_panel | runtime_command | uiEffect<br>nonRollbackable | runtime_room | player | ephemeral | owner | RuntimeScriptUiProjectionPatched | no |
UI.openPanel | host.ui.open_panel | runtime_command | uiEffect<br>nonRollbackable | runtime_room | player | ephemeral | owner | RuntimeScriptUiProjectionPatched | no |
UI.setWidgetValue | host.ui.set_widget_value | runtime_command | uiEffect<br>nonRollbackable | runtime_room | player | ephemeral | owner | RuntimeScriptUiProjectionPatched | no |
Warehouse.append | host.warehouse.append | state_write | writeState<br>durable<br>requiresAuthority | warehouse | persisted_project | durable | server_only | RuntimeWarehouseRecordUpdated | no |
Warehouse.create | host.warehouse.create | state_write | writeState<br>durable<br>requiresAuthority | warehouse | persisted_project | durable | server_only | RuntimeWarehouseRecordCreated | no |
Warehouse.delete | host.warehouse.delete | state_write | writeState<br>durable<br>requiresAuthority | warehouse | persisted_project | durable | server_only | RuntimeWarehouseRecordDeleted | no |
Warehouse.get | host.warehouse.get | read | readState<br>durable | warehouse | persisted_project | backward_compatible | server_only | RuntimeWarehousePrefetchCompleted | no |
Warehouse.increment | host.warehouse.increment | state_write | writeState<br>durable<br>requiresAuthority | warehouse | persisted_project | durable | server_only | RuntimeWarehouseRecordUpdated | no |
Warehouse.query | host.warehouse.query | read | readState<br>durable | warehouse | persisted_project | backward_compatible | server_only | RuntimeWarehousePrefetchCompleted | no |
Warehouse.set | host.warehouse.set | state_write | writeState<br>durable<br>requiresAuthority | warehouse | persisted_project | durable | server_only | RuntimeWarehouseRecordUpdated | no |
Warehouse.update | host.warehouse.update | state_write | writeState<br>durable<br>requiresAuthority | warehouse | persisted_project | durable | server_only | RuntimeWarehouseRecordUpdated | no |
Water.isSubmerged | host.water.is_submerged | read | readWorld | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
Water.surfaceLevelAt | host.water.surface_level_at | read | readWorld | script_runtime | script_instance | ephemeral | server_only | RuntimeScriptPendingOpDrained | no |
World.despawn | host.world.despawn | world_mutation | writeWorld<br>despawnEntity<br>requiresAuthority | runtime_room | entity | session | room | RuntimeScriptPendingOpDrained | no |
World.find | host.world.find | read | readWorld | runtime_room | entity | session | room | no | |
World.spawn | host.world.spawn | world_mutation | writeWorld<br>spawnEntity<br>requiresAuthority | runtime_room | entity | session | room | RuntimePrefabInstantiated<br>RuntimeScriptPendingOpDrained | no |
World.spawnPrefab | host.world.spawn_prefab | world_mutation | writeWorld<br>spawnEntity<br>requiresAuthority | runtime_room | entity | session | room | RuntimePrefabInstantiated<br>RuntimeScriptPendingOpDrained | no |
World.teleportPlayer | host.world.teleport_player | world_mutation | writeWorld<br>networked<br>nonRollbackable<br>requiresAuthority | runtime_room | player | session | room | RuntimeTeleportRequested | no |
Runtime Pending Ops
| Pending op | Host refs | Receipt kind |
|---|---|---|
audio_background_music | Audio.setBackgroundMusic | RuntimeScriptPendingOpDrained |
audio_play | Audio.play<br>Audio.playSpatial | RuntimeScriptPendingOpDrained |
audio_set_volume | Audio.setVolume | RuntimeScriptPendingOpDrained |
audio_stop | Audio.stop | RuntimeScriptPendingOpDrained |
camera_add_look_input | Camera.addLookInput | RuntimeScriptPendingOpDrained |
camera_set_look_sensitivity | Camera.setLookSensitivity | RuntimeScriptPendingOpDrained |
camera_set_pitch_clamp | Camera.setPitchClamp | RuntimeScriptPendingOpDrained |
camera_set_view_target | Camera.setViewTarget | RuntimeScriptPendingOpDrained |
component_patch | Entity.addComponent<br>Entity.patchComponent | RuntimeScriptPendingOpDrained |
component_remove | Entity.removeComponent | RuntimeScriptPendingOpDrained |
component_replace | Entity.replaceComponent | RuntimeScriptPendingOpDrained |
custom_event_emit | Events.emit | RuntimeCustomEventEmitted |
data_store_write | Warehouse.append<br>Warehouse.create<br>Warehouse.delete<br>Warehouse.increment<br>Warehouse.set<br>Warehouse.update | RuntimeWarehouseRecordUpdated |
entity_despawn_target | World.despawn | RuntimeScriptPendingOpDrained |
entity_detach | Entity.detach | RuntimeScriptPendingOpDrained |
entity_name_set | Entity.setName | RuntimeScriptPendingOpDrained |
entity_reparent | Entity.setParent | RuntimeScriptPendingOpDrained |
entity_spawn | World.spawn | RuntimeScriptPendingOpDrained |
entity_tag_add | Entity.setTag | RuntimeScriptPendingOpDrained |
entity_tag_remove | Entity.removeTag | RuntimeScriptPendingOpDrained |
latent_cancel | RuntimeScriptPendingOpDrained | |
latent_schedule | RuntimeScriptPendingOpDrained | |
log | Debug.log | RuntimeScriptLog |
match_phase_transition | Match.setPhase | RuntimeScriptWinStateSet |
network_message_send | Network.sendMessage | RuntimeNetworkMessageSent |
objective_state_patch | Match.patchObjective | RuntimeScriptObjectivePatchRequested |
physics_command | Physics.command | RuntimeScriptPendingOpDrained |
platform_exit_fullscreen | Platform.exitFullscreen | RuntimeScriptPendingOpDrained |
platform_exit_pointer_lock | Platform.exitPointerLock | RuntimeScriptPendingOpDrained |
platform_request_fullscreen | Platform.requestFullscreen | RuntimeScriptPendingOpDrained |
platform_request_pointer_lock | Platform.requestPointerLock | RuntimeScriptPendingOpDrained |
prefab_instantiate | World.spawn | RuntimeScriptPendingOpDrained |
score_add | Match.addScore | RuntimeScriptScoreAddRequested |
teleport_player | World.teleportPlayer | RuntimeScriptPendingOpDrained |
ui_close_panel | UI.closePanel | RuntimeScriptPendingOpDrained |
ui_open_panel | UI.openPanel | RuntimeScriptPendingOpDrained |
ui_set_widget_value | UI.setWidgetValue | RuntimeScriptPendingOpDrained |
Projection Rules
- Canonical Script IR is the only source for per-script effect contracts.
- Semantic Patch is the normal authoring path for creator/AI gameplay behavior.
- Generated TypeScript and visual graph layouts are projections, not contract authority.
- Runtime draining refuses pending ops that cannot be matched to a declared script effect contract.