---
title: "Script Node Declarations"
description: "Sources: `packages/script-nodes/src/index.ts:scriptNodeDeclarations`, `packages/script-codegen/src/views/index.ts:SCRIPT_VIEWS`, `packages/script-codegen/src/surface/grammarReference.ts:GESSASCRIPT_GRAMMAR_REFERENCE`, `packages/script-nodes/src/fieldSchemas.ts:PHYSICS_BODY_COMMAND_PRESENTATION`."
engineVersion: v1.0.234
date: 2026-09-28
license: "(c) Gessa, proprietary. Cite with attribution to https://gessa.ai/docs/. Terms: https://gessa.ai/terms/."
canonical: https://gessa.ai/docs/spec/generated/script-node-catalog/
---
<!-- GENERATED FILE: do not edit by hand. -->
<!-- Regenerate with `npm run gen-docs`. -->

Sources: `packages/script-nodes/src/index.ts:scriptNodeDeclarations`, `packages/script-codegen/src/views/index.ts:SCRIPT_VIEWS`, `packages/script-codegen/src/surface/grammarReference.ts:GESSASCRIPT_GRAMMAR_REFERENCE`, `packages/script-nodes/src/fieldSchemas.ts:PHYSICS_BODY_COMMAND_PRESENTATION`.

# Script Node Declarations

Canonical Script IR node declarations live in `@game-platform/script-nodes` and are consumed by runtime, codegen, generated SDK declarations, AI tooling, and frontend visual authoring.

This package is the single declaration source for script visual nodes. It has no server or runtime dependencies and is safe for frontend imports.

Declaration catalog hash: `sha256:468b13a39fc8b6669aed3440b538a3da66303c349cd8843c300235cd63ee1a2f`.

## Script source and language views

| View | Editing | Description |
| --- | --- | --- |
| Python-style | Editable | The canonical form. This is the view you can edit. |
| Lua-style | Read-only | Lua-shaped reading of this script. Read-only. |
| C#-style | Read-only | C#-shaped reading of this script. Read-only. |
| TypeScript-style | Read-only | TypeScript-shaped reading of this script. Read-only. |

- GessaScript is an INDENTATION language: not TypeScript, not JSON. No braces around blocks, no semicolons, no imports, no `host`, `function` or `set` keywords. A block opens with `:` and its body is indented 4 spaces.
- Line 1 is `script <scriptKey>`. Top level accepts only: `var <name> = <literal>` (mutable), `const <name> = <literal>`, `event <key>(<params>)` (declares a custom event; no body), `[export] [pure] def <name>(<params>) [-> <type>]:` (a function; call it ONLY as a statement `name(args)`, never inside an expression), and handlers, which are a `@on....` decorator on the line directly above a `def`.
- Handler heads: @on.start over def start():; @on.tick over def tick(deltaSeconds): (name the binding whatever you like); @on.action("<actionKey>") over def action_<key>():; @on.timer("<timerKey>") over def timer_<key>():; @on.event("<customEventKey>") over def event_<key>(<bindings>):; @on.init over def init():; @on.frame over def frame(t, dt):; @on.resize over def resize(w, h):. Every other engine event is `@on.runtime("<Event>")` where <Event> is one of: onCharacterRemoved, onCharacterSpawned, onMatchEnded, onNetworkMessage, onPanelAction, onPhaseEnter, onPhaseExit, onPlayerJoined, onPlayerLeft, onPurchaseFulfilled, onTriggerEnter, onTriggerExit, onWidgetPress. `@on.event("k")` is a CUSTOM event you declared, so `@on.event("trigger_enter")` is NOT the trigger; write `@on.runtime("onTriggerEnter")`. The name under a decorator is normalized on save, so write the derived one.
- Statements: `let x = <expr>` (a local, assigned ONCE; declare a `var` at the top of the script for mutable state); assignment `x = <expr>`, `x += 1` (also -= *= /=); `if <cond>:` / `elif <cond>:` / `else:`; `for item in <array> [limit n]:`; `while <cond> [limit n]:`; `match <expr>:` with `case <value>:` arms and a `case _:` catch-all; `return <expr>`; `break`; `continue`; `pass`; dispatch `<eventKey>.emit(<args>)`; and calls `Namespace.function(args)` or `name(args)` on their own line.
- Expressions: literals (numbers, strings, True, False, [arrays], { objects }), member access `a.b`, conditional expressions `a if condition else b`, and operators: `or`, `and`, `not`, `==` `!=`, `<` `<=` `>` `>=`, `+` `-`, `*` `/` `%`, `??`, unary `-`. There are NO helper calls for arithmetic or comparison: `add(a, b)` and `gt(a, 0)` do not exist (GS_ELAB_UNKNOWN_HOST); write `a + b` and `a > 0`. There are also no classes, imports, lambdas, comprehensions, exceptions or async: the parser answers each of those with the form to use instead.
- Engine functions are called BARE by dotted path: the hosts listed below (e.g. `Debug.log("x")`) and the core operations array.length(...), array.mutate.<push|addUnique|insert|removeAt|removeValue|clear|set|unique|reverse>(...), bitwise.<and|or|xor|not|shl|shr|ushr>(...), entity.id(...), event.key(...), math.<min|max|abs|floor|ceil|round|clamp|sqrt|pow|sign|lerp|sin|cos|tan|asin|acos|atan|atan2|exp|ln|log10|log2|deg2rad|rad2deg|wrapAngle|smoothstep|imul32>(...), math.remap(...), object.<set|merge|keys|entries|has|delete>(...), quat.<make|multiply|slerp|fromEuler|toEuler|lookAt|rotateVector|inverse>(...), string.<concat|length|format|contains|split|upper|lower|replace|substring|trim|startsWith|endsWith|indexOf>(...), vec3.<add|sub|scale|dot|cross|length|normalize|distance|lerp|make|breakX|breakY|breakZ|reflect|moveTowards|project|angleBetween|clampLength>(...).

```python
script script.relic.pickup
var collected = 0
const goal = 3
var armed = False
event scored(points: number)
def announce(points: number):
    Debug.log("scored", { value: points })
@on.start
def start():
    armed = True
@on.action("player.reset")
def action_player_reset():
    collected = 0
@on.runtime("onTriggerEnter")
def runtime_on_trigger_enter():
    collected += 1
    let remaining = math.max(0, goal - collected)
    if collected >= goal:
        scored.emit(collected)
    elif remaining == 1:
        Debug.log("one more")
    else:
        Debug.log("collected", { value: collected })
@on.event("scored")
def event_scored(points):
    announce(points)
@on.tick
def tick(dt):
    match collected:
        case 0:
            Debug.log("empty")
        case _:
            if Entity.hasTag("relic") and dt > 0:
                Debug.log("relic")
```

## Counts

| Kind | Count |
| --- | --- |
| event | 21 |
| core | 53 |
| host | 112 |
| total | 186 |

## Categories

| Category | Count | Nodes |
| --- | --- | --- |
| Audio | 5 | `host.audio.play`, `host.audio.play_spatial`, `host.audio.set_background_music`, `host.audio.set_volume`, `host.audio.stop` |
| Components | 7 | `core.component.patch`, `core.component.read`, `host.entity.add_component`, `host.entity.patch_component`, `host.entity.read_component`, `host.entity.remove_component`, `host.entity.replace_component` |
| Control | 16 | `core.array.for_each`, `core.bounded.for`, `core.bounded.while`, `core.flow.break`, `core.flow.continue`, `core.flow.do_n`, `core.flow.do_once`, `core.flow.flip_flop`, `core.flow.gate`, `core.flow.multi_gate`, `core.flow.return`, `core.flow.timer.after`, `core.flow.timer.cancel`, `core.if`, `core.sequence`, `core.switch` |
| Debug | 1 | `host.debug.log` |
| Effects | 3 | `core.host.call`, `host.fx.decal`, `host.fx.particle_burst` |
| Events | 25 | `core.event.key`, `core.event.payload.get`, `event.action`, `event.character_removed`, `event.character_spawned`, `event.custom`, `event.frame`, `event.init`, `event.match_ended`, `event.network_message`, `event.panel_action`, `event.phase`, `event.phase_exit`, `event.player_joined`, `event.player_left`, `event.purchase_fulfilled`, `event.resize`, `event.start`, `event.tick`, `event.timer`, `event.trigger`, `event.trigger_exit`, `event.widget_press`, `host.events.emit`, `host.network.send_message` |
| Match & Players | 15 | `host.inventory.grant`, `host.match.add_score`, `host.match.get_score`, `host.match.get_state`, `host.match.patch_objective`, `host.match.set_phase`, `host.player.eliminate`, `host.player.possess`, `host.player.release`, `host.player.spawn_character`, `host.players.get`, `host.players.list`, `host.room.get_players`, `host.room.get_state`, `host.team.get_assignment` |
| Persistence | 9 | `host.warehouse.append`, `host.warehouse.create`, `host.warehouse.delete`, `host.warehouse.get`, `host.warehouse.increment`, `host.warehouse.query`, `host.warehouse.set`, `host.warehouse.transform`, `host.warehouse.update` |
| Physics | 19 | `host.navigation.find_path`, `host.navigation.is_reachable`, `host.navigation.nearest_point`, `host.navigation.raycast`, `host.navigation.steer_toward`, `host.physics.command`, `host.physics.occupancy_query`, `host.physics.overlap_test`, `host.physics.raycast`, `host.physics.shapecast`, `host.terrain.height_at`, `host.terrain.normal_at`, `host.terrain.raycast_down`, `host.terrain.sample_layer_weights`, `host.terrain.slope_at`, `host.tween.cancel`, `host.tween.start`, `host.water.is_submerged`, `host.water.surface_level_at` |
| Platform | 10 | `host.camera.add_look_input`, `host.camera.set_look_sensitivity`, `host.camera.set_pitch_clamp`, `host.camera.set_view_target`, `host.commerce.owns`, `host.commerce.prompt_purchase`, `host.platform.exit_fullscreen`, `host.platform.exit_pointer_lock`, `host.platform.request_fullscreen`, `host.platform.request_pointer_lock` |
| UI | 3 | `host.ui.close_panel`, `host.ui.open_panel`, `host.ui.set_widget_value` |
| Values | 50 | `core.arithmetic`, `core.array.first`, `core.array.get`, `core.array.length`, `core.array.mutate`, `core.array.query`, `core.array.reduce`, `core.array.transform`, `core.bitwise`, `core.boolean`, `core.comparison`, `core.entity.id`, `core.expression.codebox`, `core.get`, `core.let`, `core.map`, `core.math`, `core.math.remap`, `core.not`, `core.object`, `core.quat`, `core.record.get`, `core.select`, `core.set`, `core.string`, `core.value.array`, `core.value.assert`, `core.value.cast`, `core.value.coerce`, `core.value.literal`, `core.value.object`, `core.vec3`, `host.program.input_actions`, `host.program.input_bundle`, `host.program.input_flags`, `host.program.param`, `host.program.param_count`, `host.random.bool`, `host.random.gaussian`, `host.random.int`, `host.random.next`, `host.random.pick`, `host.random.point_in_circle`, `host.random.point_in_sphere`, `host.random.range`, `host.random.seeded`, `host.random.shuffle`, `host.random.sign`, `host.random.unit_vector`, `host.random.weighted_pick` |
| World | 23 | `host.entity.ancestors`, `host.entity.children`, `host.entity.descendants`, `host.entity.detach`, `host.entity.has_tag`, `host.entity.parent`, `host.entity.remove_tag`, `host.entity.set_name`, `host.entity.set_owner`, `host.entity.set_parent`, `host.entity.set_tag`, `host.entity.world_position`, `host.entity.world_rotation`, `host.world.despawn`, `host.world.entity_has_tag`, `host.world.find`, `host.world.query`, `host.world.set_entity_owner`, `host.world.set_entity_tag`, `host.world.spawn`, `host.world.spawn_many`, `host.world.spawn_prefab`, `host.world.teleport_player` |

## SDK Hosts

| Host | Node | Category | SDK path | Deterministic | Metered | Risk | Effect tags | Permissions |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `Audio.play` | `host.audio.play` | Audio | `ctx.audio.play` | no | yes | effect | `audioEffect`, `networked`, `nonRollbackable` | `audio:effect` |
| `Audio.playSpatial` | `host.audio.play_spatial` | Audio | `ctx.audio.playSpatial` | no | yes | effect | `audioEffect`, `networked`, `nonRollbackable` | `audio:effect` |
| `Audio.setBackgroundMusic` | `host.audio.set_background_music` | Audio | `ctx.audio.setBackgroundMusic` | no | yes | effect | `audioEffect`, `nonRollbackable` | `audio:effect` |
| `Audio.setVolume` | `host.audio.set_volume` | Audio | `ctx.audio.setVolume` | yes | yes | effect | `audioEffect` | `audio:effect` |
| `Audio.stop` | `host.audio.stop` | Audio | `ctx.audio.stop` | yes | yes | effect | `audioEffect` | `audio:effect` |
| `Camera.addLookInput` | `host.camera.add_look_input` | Platform | `ctx.camera.addLookInput` | yes | yes | effect | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `camera:write` |
| `Camera.setLookSensitivity` | `host.camera.set_look_sensitivity` | Platform | `ctx.camera.setLookSensitivity` | yes | yes | effect | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `camera:write` |
| `Camera.setPitchClamp` | `host.camera.set_pitch_clamp` | Platform | `ctx.camera.setPitchClamp` | yes | yes | effect | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `camera:write` |
| `Camera.setViewTarget` | `host.camera.set_view_target` | Platform | `ctx.camera.setViewTarget` | yes | yes | effect | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `camera:write` |
| `Commerce.owns` | `host.commerce.owns` | Platform | `ctx.commerce.owns` | yes | yes | read | `readState` | `commerce:read` |
| `Commerce.promptPurchase` | `host.commerce.prompt_purchase` | Platform | `ctx.commerce.promptPurchase` | yes | yes | effect | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `commerce:request` |
| `Debug.log` | `host.debug.log` | Debug | `ctx.log` | no | no | read | `emitEvent` | `debug:write` |
| `Entity.addComponent` | `host.entity.add_component` | Components | `ctx.entity.addComponent` | yes | yes | write | `writeState`, `writeWorld`, `requiresAuthority` | `component:write` |
| `Entity.ancestors` | `host.entity.ancestors` | World | `ctx.entity.ancestors` | yes | yes | read | `readWorld`, `readState` | `world:read` |
| `Entity.children` | `host.entity.children` | World | `ctx.entity.children` | yes | yes | read | `readWorld`, `readState` | `world:read` |
| `Entity.descendants` | `host.entity.descendants` | World | `ctx.entity.descendants` | yes | yes | read | `readWorld`, `readState` | `world:read` |
| `Entity.detach` | `host.entity.detach` | World | `ctx.entity.detach` | yes | yes | write | `writeState`, `writeWorld`, `requiresAuthority` | `entity:write` |
| `Entity.hasTag` | `host.entity.has_tag` | World | `ctx.entity.hasTag` | yes | yes | read | `readWorld`, `readState` | `world:read` |
| `Entity.parent` | `host.entity.parent` | World | `ctx.entity.parent` | yes | yes | read | `readWorld`, `readState` | `world:read` |
| `Entity.patchComponent` | `host.entity.patch_component` | Components | `ctx.entity.patchComponent` | yes | yes | write | `writeState`, `writeWorld`, `requiresAuthority` | `component:write` |
| `Entity.readComponent` | `host.entity.read_component` | Components | `ctx.entity.readComponent` | yes | yes | read | `readState`, `readWorld` | `component:read` |
| `Entity.removeComponent` | `host.entity.remove_component` | Components | `ctx.entity.removeComponent` | yes | yes | write | `writeState`, `writeWorld`, `requiresAuthority` | `component:write` |
| `Entity.removeTag` | `host.entity.remove_tag` | World | `ctx.entity.removeTag` | yes | yes | write | `writeState`, `writeWorld`, `requiresAuthority` | `entity:write` |
| `Entity.replaceComponent` | `host.entity.replace_component` | Components | `ctx.entity.replaceComponent` | yes | yes | write | `writeState`, `writeWorld`, `requiresAuthority` | `component:write` |
| `Entity.setName` | `host.entity.set_name` | World | `ctx.entity.setName` | yes | yes | write | `writeState`, `writeWorld`, `requiresAuthority` | `entity:write` |
| `Entity.setOwner` | `host.entity.set_owner` | World | `ctx.entity.setOwner` | yes | yes | effect | `writeWorld`, `writeState`, `requiresAuthority` | `entity:write` |
| `Entity.setParent` | `host.entity.set_parent` | World | `ctx.entity.setParent` | yes | yes | write | `writeState`, `writeWorld`, `requiresAuthority` | `entity:write` |
| `Entity.setTag` | `host.entity.set_tag` | World | `ctx.entity.setTag` | yes | yes | write | `writeState`, `writeWorld`, `requiresAuthority` | `entity:write` |
| `Entity.worldPosition` | `host.entity.world_position` | World | `ctx.entity.worldPosition` | yes | yes | read | `readWorld`, `readState` | `world:read` |
| `Entity.worldRotation` | `host.entity.world_rotation` | World | `ctx.entity.worldRotation` | yes | yes | read | `readWorld`, `readState` | `world:read` |
| `Events.emit` | `host.events.emit` | Events | `ctx.events.emit` | yes | yes | effect | `emitEvent` | `event:emit` |
| `Fx.decal` | `host.fx.decal` | Effects | `ctx.fx.decal` | no | yes | effect | `networked`, `nonRollbackable` | `fx:effect` |
| `Fx.particleBurst` | `host.fx.particle_burst` | Effects | `ctx.fx.particleBurst` | no | yes | effect | `networked`, `nonRollbackable` | `fx:effect` |
| `Inventory.grant` | `host.inventory.grant` | Match & Players | `ctx.inventory.grant` | yes | yes | effect | `writeState`, `emitEvent`, `durable`, `requiresAuthority` | `inventory:write` |
| `Match.addScore` | `host.match.add_score` | Match & Players | `ctx.match.addScore` | yes | yes | effect | `writeState`, `emitEvent`, `requiresAuthority` | `match:write` |
| `Match.getScore` | `host.match.get_score` | Match & Players | `ctx.match.getScore` | yes | yes | read | `readState` | `match:read` |
| `Match.getState` | `host.match.get_state` | Match & Players | `ctx.match.getState` | yes | yes | read | `readState` | `match:read` |
| `Match.patchObjective` | `host.match.patch_objective` | Match & Players | `ctx.match.patchObjective` | yes | yes | effect | `writeState`, `emitEvent`, `requiresAuthority` | `match:write` |
| `Match.setPhase` | `host.match.set_phase` | Match & Players | `ctx.match.setPhase` | yes | yes | effect | `writeState`, `emitEvent`, `requiresAuthority` | `match:write` |
| `Navigation.findPath` | `host.navigation.find_path` | Physics | `ctx.navigation.findPath` | yes | yes | read | `readWorld` | `navigation:query` |
| `Navigation.isReachable` | `host.navigation.is_reachable` | Physics | `ctx.navigation.isReachable` | yes | yes | read | `readWorld` | `navigation:query` |
| `Navigation.nearestPoint` | `host.navigation.nearest_point` | Physics | `ctx.navigation.nearestPoint` | yes | yes | read | `readWorld` | `navigation:query` |
| `Navigation.raycast` | `host.navigation.raycast` | Physics | `ctx.navigation.raycast` | yes | yes | read | `readWorld` | `navigation:query` |
| `Navigation.steerToward` | `host.navigation.steer_toward` | Physics | `ctx.navigation.steerToward` | yes | yes | read | `readWorld` | `navigation:query` |
| `Network.sendMessage` | `host.network.send_message` | Events | `ctx.network.sendMessage` | yes | yes | effect | `emitEvent`, `networked`, `nonRollbackable` | `network:send` |
| `Physics.command` | `host.physics.command` | Physics | `ctx.physics.command` | yes | yes | effect | `physicsCommand`, `writeWorld`, `requiresAuthority` | `physics:write` |
| `Physics.occupancyQuery` | `host.physics.occupancy_query` | Physics | `ctx.physics.occupancyQuery` | yes | yes | read | `readWorld` | `physics:query` |
| `Physics.overlapTest` | `host.physics.overlap_test` | Physics | `ctx.physics.overlapTest` | yes | yes | read | `readWorld` | `physics:query` |
| `Physics.raycast` | `host.physics.raycast` | Physics | `ctx.physics.raycast` | yes | yes | read | `readWorld` | `physics:query` |
| `Physics.shapecast` | `host.physics.shapecast` | Physics | `ctx.physics.shapecast` | yes | yes | read | `readWorld` | `physics:query` |
| `Platform.exitFullscreen` | `host.platform.exit_fullscreen` | Platform | `ctx.platform.exitFullscreen` | yes | yes | effect | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `platform:request` |
| `Platform.exitPointerLock` | `host.platform.exit_pointer_lock` | Platform | `ctx.platform.exitPointerLock` | yes | yes | effect | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `platform:request` |
| `Platform.requestFullscreen` | `host.platform.request_fullscreen` | Platform | `ctx.platform.requestFullscreen` | yes | yes | effect | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `platform:request` |
| `Platform.requestPointerLock` | `host.platform.request_pointer_lock` | Platform | `ctx.platform.requestPointerLock` | yes | yes | effect | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `platform:request` |
| `Player.eliminate` | `host.player.eliminate` | Match & Players | `ctx.players.eliminate` | yes | yes | effect | `writeWorld`, `requiresAuthority` | `room:write` |
| `Player.possess` | `host.player.possess` | Match & Players | `ctx.players.possess` | yes | yes | effect | `writeWorld`, `requiresAuthority` | `room:write` |
| `Player.release` | `host.player.release` | Match & Players | `ctx.players.release` | yes | yes | effect | `writeWorld`, `requiresAuthority` | `room:write` |
| `Player.spawnCharacter` | `host.player.spawn_character` | Match & Players | `ctx.players.spawnCharacter` | yes | yes | effect | `spawnEntity`, `writeWorld`, `requiresAuthority` | `room:write` |
| `Players.get` | `host.players.get` | Match & Players | `ctx.players.get` | yes | no | read | `readWorld` | `room:read` |
| `Players.list` | `host.players.list` | Match & Players | `ctx.players.list`, `ctx.room.getPlayers` | yes | no | read | `readWorld` | `room:read` |
| `Program.inputActions` | `host.program.input_actions` | Values | `ctx.program.inputActions` | yes | no | read | `pure` | None |
| `Program.inputBundle` | `host.program.input_bundle` | Values | `ctx.program.inputBundle` | yes | no | read | `pure` | None |
| `Program.inputFlags` | `host.program.input_flags` | Values | `ctx.program.inputFlags` | yes | no | read | `pure` | None |
| `Program.param` | `host.program.param` | Values | `ctx.program.param` | yes | no | read | `pure` | None |
| `Program.paramCount` | `host.program.param_count` | Values | `ctx.program.paramCount` | yes | no | read | `pure` | None |
| `Random.bool` | `host.random.bool` | Values | `ctx.random.bool` | yes | no | read | `pure` | `random:read` |
| `Random.gaussian` | `host.random.gaussian` | Values | `ctx.random.gaussian` | yes | no | read | `pure` | `random:read` |
| `Random.int` | `host.random.int` | Values | `ctx.random.int` | yes | no | read | `pure` | `random:read` |
| `Random.next` | `host.random.next` | Values | `ctx.random` | yes | no | read | `pure` | `random:read` |
| `Random.pick` | `host.random.pick` | Values | `ctx.random.pick` | yes | no | read | `pure` | `random:read` |
| `Random.pointInCircle` | `host.random.point_in_circle` | Values | `ctx.random.pointInCircle` | yes | no | read | `pure` | `random:read` |
| `Random.pointInSphere` | `host.random.point_in_sphere` | Values | `ctx.random.pointInSphere` | yes | no | read | `pure` | `random:read` |
| `Random.range` | `host.random.range` | Values | `ctx.random.range` | yes | no | read | `pure` | `random:read` |
| `Random.seeded` | `host.random.seeded` | Values | `ctx.random.seeded` | yes | no | read | `pure` | `random:read` |
| `Random.shuffle` | `host.random.shuffle` | Values | `ctx.random.shuffle` | yes | no | read | `pure` | `random:read` |
| `Random.sign` | `host.random.sign` | Values | `ctx.random.sign` | yes | no | read | `pure` | `random:read` |
| `Random.unitVector` | `host.random.unit_vector` | Values | `ctx.random.unitVector` | yes | no | read | `pure` | `random:read` |
| `Random.weightedPick` | `host.random.weighted_pick` | Values | `ctx.random.weightedPick` | yes | no | read | `pure` | `random:read` |
| `Room.getPlayers` | `host.room.get_players` | Match & Players | `ctx.room.getPlayers` | yes | yes | read | `readState`, `readWorld` | `room:read` |
| `Room.getState` | `host.room.get_state` | Match & Players | `ctx.room.getState` | yes | yes | read | `readState`, `readWorld` | `room:read` |
| `Team.getAssignment` | `host.team.get_assignment` | Match & Players | `ctx.team.getAssignment` | yes | yes | read | `readState`, `readWorld` | `team:read` |
| `Terrain.heightAt` | `host.terrain.height_at` | Physics | `ctx.terrain.heightAt` | yes | yes | read | `readWorld` | `terrain:query` |
| `Terrain.normalAt` | `host.terrain.normal_at` | Physics | `ctx.terrain.normalAt` | yes | yes | read | `readWorld` | `terrain:query` |
| `Terrain.raycastDown` | `host.terrain.raycast_down` | Physics | `ctx.terrain.raycastDown` | yes | yes | read | `readWorld` | `terrain:query` |
| `Terrain.sampleLayerWeights` | `host.terrain.sample_layer_weights` | Physics | `ctx.terrain.sampleLayerWeights` | yes | yes | read | `readWorld` | `terrain:query` |
| `Terrain.slopeAt` | `host.terrain.slope_at` | Physics | `ctx.terrain.slopeAt` | yes | yes | read | `readWorld` | `terrain:query` |
| `Tween.cancel` | `host.tween.cancel` | Physics | `ctx.tween.cancel` | yes | yes | effect | `writeWorld`, `requiresAuthority` | `tween:write` |
| `Tween.start` | `host.tween.start` | Physics | `ctx.tween.start` | yes | yes | effect | `writeWorld`, `requiresAuthority` | `tween:write` |
| `UI.closePanel` | `host.ui.close_panel` | UI | `ctx.ui.closePanel` | no | yes | effect | `uiEffect`, `nonRollbackable` | `ui:effect` |
| `UI.openPanel` | `host.ui.open_panel` | UI | `ctx.ui.openPanel` | no | yes | effect | `uiEffect`, `nonRollbackable` | `ui:effect` |
| `UI.setWidgetValue` | `host.ui.set_widget_value` | UI | `ctx.ui.setWidgetValue` | no | yes | effect | `uiEffect`, `nonRollbackable` | `ui:effect` |
| `Warehouse.append` | `host.warehouse.append` | Persistence | `ctx.warehouse.append` | yes | yes | write | `writeState`, `durable`, `requiresAuthority` | `warehouse:write` |
| `Warehouse.create` | `host.warehouse.create` | Persistence | `ctx.warehouse.create` | yes | yes | write | `writeState`, `durable`, `requiresAuthority` | `warehouse:write` |
| `Warehouse.delete` | `host.warehouse.delete` | Persistence | `ctx.warehouse.delete` | yes | yes | write | `writeState`, `durable`, `requiresAuthority` | `warehouse:write` |
| `Warehouse.get` | `host.warehouse.get` | Persistence | `ctx.warehouse.get` | yes | yes | read | `readState`, `durable` | `warehouse:read` |
| `Warehouse.increment` | `host.warehouse.increment` | Persistence | `ctx.warehouse.increment` | yes | yes | write | `writeState`, `durable`, `requiresAuthority` | `warehouse:write` |
| `Warehouse.query` | `host.warehouse.query` | Persistence | `ctx.warehouse.query` | yes | yes | read | `readState`, `durable` | `warehouse:read` |
| `Warehouse.set` | `host.warehouse.set` | Persistence | `ctx.warehouse.set` | yes | yes | write | `writeState`, `durable`, `requiresAuthority` | `warehouse:write` |
| `Warehouse.transform` | `host.warehouse.transform` | Persistence | `ctx.warehouse.transform` | yes | yes | write | `writeState`, `durable`, `requiresAuthority` | `warehouse:write` |
| `Warehouse.update` | `host.warehouse.update` | Persistence | `ctx.warehouse.update` | yes | yes | write | `writeState`, `durable`, `requiresAuthority` | `warehouse:write` |
| `Water.isSubmerged` | `host.water.is_submerged` | Physics | `ctx.water.isSubmerged` | yes | yes | read | `readWorld` | `water:query` |
| `Water.surfaceLevelAt` | `host.water.surface_level_at` | Physics | `ctx.water.surfaceLevelAt` | yes | yes | read | `readWorld` | `water:query` |
| `World.despawn` | `host.world.despawn` | World | `ctx.world.despawn` | yes | yes | effect | `despawnEntity`, `writeWorld`, `requiresAuthority` | `entity:write` |
| `World.entityHasTag` | `host.world.entity_has_tag` | World | `ctx.world.entityHasTag` | yes | yes | read | `readWorld`, `readState` | `world:read` |
| `World.find` | `host.world.find` | World | `ctx.world.find` | yes | yes | read | `readWorld` | `world:read` |
| `World.query` | `host.world.query` | World | `ctx.world.query` | yes | yes | read | `readWorld` | `world:read` |
| `World.setEntityOwner` | `host.world.set_entity_owner` | World | `ctx.world.setEntityOwner` | yes | yes | effect | `writeWorld`, `writeState`, `requiresAuthority` | `entity:write` |
| `World.setEntityTag` | `host.world.set_entity_tag` | World | `ctx.world.setEntityTag` | yes | yes | write | `writeState`, `writeWorld`, `requiresAuthority` | `entity:write` |
| `World.spawn` | `host.world.spawn` | World | `ctx.world.spawn` | yes | yes | effect | `spawnEntity`, `writeWorld`, `requiresAuthority` | `entity:write` |
| `World.spawnMany` | `host.world.spawn_many` | World | `ctx.world.spawnMany` | yes | yes | effect | `spawnEntity`, `writeWorld`, `requiresAuthority` | `entity:write` |
| `World.spawnPrefab` | `host.world.spawn_prefab` | World | `ctx.world.spawnPrefab` | yes | yes | effect | `spawnEntity`, `writeWorld`, `requiresAuthority` | `entity:write` |
| `World.teleportPlayer` | `host.world.teleport_player` | World | `ctx.world.teleportPlayer` | yes | yes | effect | `writeWorld`, `networked`, `nonRollbackable`, `requiresAuthority` | `world:write` |

## Atom Contract Cards

Every launch host atom has a contract card derived from `SCRIPT_ATOM_REGISTRY`. Compatibility-only aliases are intentionally excluded from this table and from new authoring.

| Atom | Classification | Owner | Inputs | Validation | Permissions | Determinism | Pending op / command | Runtime drain | State patches | Events | Projection | Rejection | Tests | Docs | Compatibility |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `Audio.play` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `audio:effect` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Audio.playSpatial` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `audio:effect` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Audio.setBackgroundMusic` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `audio:effect` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Audio.setVolume` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `audio:effect` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Audio.stop` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `audio:effect` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Camera.addLookInput` | keep_privileged_bridge | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `camera:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Camera.setLookSensitivity` | keep_privileged_bridge | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `camera:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Camera.setPitchClamp` | keep_privileged_bridge | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `camera:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Camera.setViewTarget` | keep_privileged_bridge | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `camera:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Commerce.owns` | keep_public_atom | script-runtime | entitlementKey string plus an optional playerSessionId (defaults to the seat possessing the script's entity). | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `commerce:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; reads ScriptRuntimeState.entitlements assembled by the room tick. | Executor-only snapshot read; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns true when the seat's active entitlement set holds the key; false for an unknown seat or key. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts`, `server/tests/scriptCommerce.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Commerce.promptPurchase` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `commerce:request` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | commerce_prompt_purchase pending op with { offerKey, audience? }. | Runtime script system resolves the audience (default: the seat possessing the script's entity) and mints one session-scoped commerce.prompt_request state patch per addressed seat; the snapshot builder projects it on that seat's private lane only. | commerce.prompt_request (private, one per addressed seat). | RuntimeScriptCommercePromptRequested. | runtime.commerce.prompt.<offerKey>.session.<playerSessionId> = { kind: commerce.prompt_opened, offerKey, requestId, playerSessionId, requestedAt, source }. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts`, `server/tests/scriptCommerce.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Debug.log` | keep_public_atom | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `debug:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.addComponent` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `component:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.ancestors` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `world:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.children` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `world:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.descendants` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `world:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.detach` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `entity:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.hasTag` | keep_public_atom | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `world:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.parent` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `world:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.patchComponent` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `component:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.readComponent` | keep_public_atom | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `component:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.removeComponent` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `component:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.removeTag` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `entity:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.replaceComponent` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `component:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.setName` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `entity:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.setOwner` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `entity:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | entity_set_owner pending op. | Drained into an entity.owner_set patch carrying the previous and next Profile (I-19 journals every transfer). | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | script.entity_owner_unauthorized when the script is not attached to a Room Script host. | `server/tests/scriptPossessionAuthority.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.setParent` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `entity:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.setTag` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `entity:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.worldPosition` | keep_readonly_projection | script-runtime | No inputs; targets the entity handle. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `world:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; reads the composed world transform already threaded onto the script entity snapshot. | Executor-only snapshot read; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns a vector3 (the snapshot worldPosition, falling back to the local position). | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Entity.worldRotation` | keep_readonly_projection | script-runtime | No inputs; targets the entity handle. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `world:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; reads the composed world transform already threaded onto the script entity snapshot. | Executor-only snapshot read; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns a vector3 of Euler angles (the snapshot worldRotation, falling back to the local rotation). | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Events.emit` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `event:emit` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Fx.decal` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `fx:effect` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | presentation_cue pending op (kind: decal). | Runtime mints a decal.cue result patch; the reliable event lane resolves the audience and fans out a per-recipient RuntimePresentationCue frame. | decal.cue (deliberately absent from CLIENT_RUNTIME_STATE_PATCH_KINDS, so a scoped cue never leaks through replay or reconnect). | RuntimePresentationCue effect (kind: decal). Cosmetic: never mutates simulation. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `server/tests/runtimeScriptEventLane.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Fx.particleBurst` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `fx:effect` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | presentation_cue pending op (kind: particles). | Runtime mints a particles.cue result patch; the reliable event lane resolves the audience and fans out a per-recipient RuntimePresentationCue frame. The seed derives from the cue id, so a replayed tick is byte-identical. | particles.cue (deliberately absent from CLIENT_RUNTIME_STATE_PATCH_KINDS, so a scoped cue never leaks through replay or reconnect). | RuntimePresentationCue effect (kind: particles). Cosmetic: never mutates simulation. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `server/tests/runtimeScriptEventLane.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Inventory.grant` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `inventory:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | inventory_grant pending op with { playerSessionId, itemKey, quantity, reason? }. | Runtime script system resolves the seat's possessed entity and mints the EXISTING inventory.grant_request state patch; the authority planner turns it into economy.inventory_delta on the durable outbox. A seat without a body fails closed (script.inventory_grant_unpossessed_seat). | inventory.grant_request -> inventory.grant_applied. | RuntimeScriptInventoryGrantRequested. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts`, `server/tests/scriptCommerce.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Match.addScore` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `match:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | score_add pending op with { subjectKey, amount, scoreboardKey?, reason? }. | Runtime script system mints a scoreboard.score_add_request state patch; the orchestration effect sink applies it through repository.addScore (the same payload the admin RPC mints). | scoreboard.score_add_request -> scoreboard.score_add_applied. | RuntimeScriptScoreAddRequested, then RuntimeScoreAddApplied from the sink. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts`, `server/tests/scriptMultiplayerScoreObjective.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Match.getScore` | keep_public_atom | script-runtime | subjectKey string plus an optional scoreboardKey (defaults to the snapshot's only scoreboard). | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `match:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; reads ScriptRuntimeState.scoreboards assembled by the room tick. | Executor-only snapshot read; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns the subject's applied score total (0 when the subject has no score yet). | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts`, `server/tests/scriptMultiplayerScoreObjective.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Match.getState` | defer_v1_palette | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `match:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Match.patchObjective` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `match:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | objective_state_patch pending op with { objectiveKey, patch, reason? }. | Runtime script system mints an objective.state_patch_request state patch; the orchestration effect sink applies it through repository.patchObjectiveState (the same payload the admin RPC mints). | objective.state_patch_request -> objective.state_patch_applied. | RuntimeScriptObjectivePatchRequested, then RuntimeObjectiveStatePatchApplied from the sink. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts`, `server/tests/scriptMultiplayerScoreObjective.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Match.setPhase` | defer_v1_palette | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `match:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Navigation.findPath` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `navigation:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Navigation.isReachable` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `navigation:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Navigation.nearestPoint` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `navigation:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Navigation.raycast` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `navigation:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Navigation.steerToward` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `navigation:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Network.sendMessage` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `network:send` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | network_message_send pending op. | Runtime script system mints a network.message state patch; the reliable event lane (runtimeScriptEventFramesFromEvent) publishes it at fanout as a broadcast notice or player-private frame. | network.message (channel + payload, optional private playerId target). | RuntimeNetworkMessageSent effect. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `server/tests/runtimeScriptEventLane.test.ts`, `server/tests/runtimeNetcodeMultiClient.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Physics.command` | keep_public_atom | runtime | entityId entity reference plus bodyCommand discriminated object: force, impulse, launch, torque, torqueImpulse, teleport, or reset. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `physics:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | physics_command pending op with { entityId, command }. | Runtime script system normalizes bodyCommand into the internal ForceComponent queue. | component.patch for internal ForceComponent pending queue plus dependency add patches when required. | RuntimePhysicsCommandQueued. | ForceComponent is internal; public projection is the physics solve result in transform/body snapshots. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts`, `server/tests/runtimeRuntimeSystems.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Physics.occupancyQuery` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `physics:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Physics.overlapTest` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `physics:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Physics.raycast` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `physics:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Physics.shapecast` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `physics:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Platform.exitFullscreen` | keep_privileged_bridge | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `platform:request` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Platform.exitPointerLock` | keep_privileged_bridge | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `platform:request` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Platform.requestFullscreen` | keep_privileged_bridge | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `platform:request` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Platform.requestPointerLock` | keep_privileged_bridge | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `platform:request` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Player.eliminate` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `room:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | player_eliminate pending op. | Drained into the character.eliminated fact and a player.possession_request release with reason respawn, the same patches the RuntimeCharacterEliminate command emits. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | script.character_eliminate_unauthorized when the script is not attached to a Room Script host and the seat is not its own; script.character_eliminate_invalid when the seat is not live or possesses no Character. | `server/tests/scriptPossessionAuthority.test.ts`, `packages/script-runtime/tests/playerSurface.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Player.possess` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `room:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | player_possession pending op with intent assign. | Drained into a player.possession_request patch the possession writer applies. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | script.player_possession_unauthorized when the script is not attached to a Room Script host and the seat is not its own. | `server/tests/scriptPossessionAuthority.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Player.release` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `room:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | player_possession pending op with intent clear. | Drained into a player.possession_request patch the possession writer applies. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | script.player_possession_unauthorized when the script is not attached to a Room Script host and the seat is not its own. | `server/tests/scriptPossessionAuthority.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Player.spawnCharacter` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `room:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | player_possession pending op with intent spawn_and_assign. | Drained into a player.possession_request patch the possession writer applies; the character policy mints the body. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | script.player_possession_unauthorized when the script is not attached to a Room Script host and the seat is not its own. | `server/tests/scriptPossessionAuthority.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Players.get` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `room:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None: a read of the live roster view the tick context already carries. | None. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `server/tests/scriptPossessionAuthority.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Players.list` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `room:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None: a read of the live roster view the tick context already carries. | None. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `server/tests/scriptPossessionAuthority.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Program.inputActions` | defer_v1_palette | script-runtime | No inputs. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | None | Deterministic: reads the held-action bitset (pp-abi.v1 SPEC 4.4 byte offset 92) as a number; decode with the bitwise family. | None; pure client-produce-Worker read. | Client program worker only; no server Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns a number. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-codegen/tests/clientFrameProfile.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Program.inputBundle` | defer_v1_palette | script-runtime | No inputs. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | None | Deterministic: copies the current frame input bundle (pp-abi.v1 SPEC 4.4) into an array of number. | None; pure client-produce-Worker read. | Client program worker only; no server Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns the 16-slot input bundle as an array of number. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-codegen/tests/clientFrameProfile.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Program.inputFlags` | defer_v1_palette | script-runtime | No inputs. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | None | Deterministic: reads the input flags word (pp-abi.v1 SPEC 4.4 byte offset 88) as a number; bit 0 = pointerLocked. | None; pure client-produce-Worker read. | Client program worker only; no server Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns a number. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-codegen/tests/clientFrameProfile.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Program.param` | defer_v1_palette | script-runtime | index: number (0-based exposed-field index). | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | None | Deterministic: reads authored numeric parameter by exposed-field index (pp-abi.v1 param_f64); out-of-range reads as 0. | None; pure client-produce-Worker read. | Client program worker only; no server Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns a number. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-codegen/tests/clientFrameProfile.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Program.paramCount` | defer_v1_palette | script-runtime | No inputs. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | None | Deterministic: returns the count of authored numeric parameters (pp-abi.v1 param_count). | None; pure client-produce-Worker read. | Client program worker only; no server Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns a number. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-codegen/tests/clientFrameProfile.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.bool` | keep_public_atom | script-runtime | Optional probability p (default 0.5) plus an optional trailing random_stream. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; returns a deterministic sample from the seeded RNG. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Return value only. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomRandom.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.gaussian` | keep_public_atom | script-runtime | Optional mean (default 0), std (default 1) plus an optional trailing random_stream. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; returns a deterministic sample from the seeded RNG. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Return value only. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomRandom.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.int` | keep_public_atom | script-runtime | min, max numbers (inclusive, unbiased) plus an optional trailing random_stream. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; returns a deterministic sample from the seeded RNG. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Return value only. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomRandom.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.next` | keep_public_atom | script-runtime | No inputs. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; returns the next deterministic RNG sample. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Return value only. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.pick` | keep_public_atom | script-runtime | array plus an optional trailing random_stream. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; returns a deterministic sample from the seeded RNG. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Return value only. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomRandom.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.pointInCircle` | keep_public_atom | script-runtime | radius number plus an optional trailing random_stream. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; returns a deterministic sample from the seeded RNG. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Return value only. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomRandom.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.pointInSphere` | keep_public_atom | script-runtime | radius number plus an optional trailing random_stream. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; returns a deterministic sample from the seeded RNG. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Return value only. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomRandom.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.range` | keep_public_atom | script-runtime | min, max numbers plus an optional trailing random_stream. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; returns a deterministic sample from the seeded RNG. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Return value only. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomRandom.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.seeded` | keep_public_atom | script-runtime | seed string or number. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; constructs an invocation-local reproducible stream handle. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns an opaque random_stream handle. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomRandom.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.shuffle` | keep_public_atom | script-runtime | array plus an optional trailing random_stream. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; returns a deterministic sample from the seeded RNG. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns a new shuffled array; the input is never mutated. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomRandom.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.sign` | keep_public_atom | script-runtime | Optional trailing random_stream. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; returns a deterministic sample from the seeded RNG. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Return value only. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomRandom.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.unitVector` | keep_public_atom | script-runtime | Optional trailing random_stream. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; returns a deterministic sample from the seeded RNG. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Return value only. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomRandom.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Random.weightedPick` | keep_public_atom | script-runtime | items and weights arrays plus an optional trailing random_stream. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `random:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; returns a deterministic sample from the seeded RNG. | Executor-only seeded RNG; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Return value only. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomRandom.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Room.getPlayers` | defer_v1_palette | script-runtime | No inputs. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `room:read` | Deterministic: the executor owns the participant filter (no admin observers or departed sessions) and the joinedAt-then-playerSessionId ordering. | None; reads the roster threaded through ScriptRuntimeState.players. | Executor-only roster read; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns RoomPlayerSnapshot rows (playerSessionId, playerId, actorId, actorKind, sessionKind, status, seatKey?, teamKey?, possessedEntityId?, joinedAt) bounded by room capacity. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/worldQueryPagination.test.ts`, `packages/script-runtime/tests/worldQueryFuzz.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Room.getState` | defer_v1_palette | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `room:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Team.getAssignment` | defer_v1_palette | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `team:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Terrain.heightAt` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `terrain:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Terrain.normalAt` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `terrain:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Terrain.raycastDown` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `terrain:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Terrain.sampleLayerWeights` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `terrain:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Terrain.slopeAt` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `terrain:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Tween.cancel` | defer_v1_palette | runtime | key string matching the one Tween Start used. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `tween:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | tween_cancel pending op with { key }. | Runtime script system removes the (scriptKey, key) tween record from the owner's TweenState, scoped so a sibling script's same-key tween is never cancelled. | Owner TweenState component.patch with the record removed. | RuntimeScriptTweenCancelled. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts`, `server/tests/runtimeRuntimeSystems.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Tween.start` | defer_v1_palette | runtime | entityId entity reference plus a spec object: { component, field, to (number or vector3), durationSeconds, easing?, key?, from?, angle? }. | Executor marshals the spec + records the metered host call; the runtime drain enforces mutation authority over the target, resolves the component field, validates the endpoint against the component schema, and rejects an unknown easing or an over-budget key. | `tween:write` | Deterministic: duration is measured in ticks and eased(t) is sampled from the shared TWEEN_EASING_FUNCTIONS table on the server tick - byte-identical across runs and replay. | tween_start pending op with { entityId, component, field, to, durationTicks, easing, key, angle }. | Runtime script system writes a snapshot-resident TweenState record on the owner; a per-tick sampler emits the target field's component.patch and GCs the record at completion. | Owner TweenState component.patch at start; per-tick target-field component.patch from the sampler; TweenState GC component.patch at completion. | RuntimeScriptTweenStarted at start; RuntimeScriptTweenCompleted at completion. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | script.tween_target_invalid / tween_component_missing / tween_easing_unknown / tween_value_invalid / tween_field_invalid / tween_budget_exceeded, or the shared entity-mutation-authority correction when the target is not owned. | `packages/script-runtime/tests/runtime.test.ts`, `server/tests/runtimeRuntimeSystems.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `UI.closePanel` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `ui:effect` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `UI.openPanel` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `ui:effect` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `UI.setWidgetValue` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `ui:effect` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Warehouse.append` | keep_public_atom | data-warehouse | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `warehouse:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Warehouse.create` | keep_public_atom | data-warehouse | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `warehouse:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Warehouse.delete` | keep_public_atom | data-warehouse | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `warehouse:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Warehouse.get` | keep_public_atom | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `warehouse:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Warehouse.increment` | keep_public_atom | data-warehouse | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `warehouse:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Warehouse.query` | keep_public_atom | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `warehouse:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Warehouse.set` | keep_public_atom | data-warehouse | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `warehouse:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Warehouse.transform` | keep_public_atom | data-warehouse | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `warehouse:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Warehouse.update` | keep_public_atom | data-warehouse | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `warehouse:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Water.isSubmerged` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `water:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `Water.surfaceLevelAt` | keep_readonly_projection | script-runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `water:query` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `World.despawn` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `entity:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `World.entityHasTag` | keep_public_atom | script-runtime | A target entity id and a tag string. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `world:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; reads the target entity's tags from the tick world snapshot. | Executor-only snapshot read; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns a boolean: whether the target entity carries the tag this tick. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `server/tests/seatAndBodyBrainrotSlice.test.ts`, `packages/script-runtime/tests/worldTargetOwnershipAndTags.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `World.find` | keep_public_atom | script-runtime | Filter object supporting id, key, name, tag, componentType, worldId, radius, origin, and limit. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `world:read` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | None; reads the script world snapshot. | Executor-only snapshot query; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns matching RuntimeEntitySnapshot values. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `World.query` | keep_public_atom | script-runtime | Options object: every ctx.world.find filter field plus cursor (opaque keyset resume token) and limit. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `world:read` | Deterministic: one shared filter predicate with ctx.world.find, and page sort + cursor seek both derive from the canonical entity-id ordering. | None; reads the script world snapshot. | Executor-only snapshot query; no Runtime drain. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Returns { entities, nextCursor?, totalMatched }: a bounded page in canonical id order, a resume cursor present exactly while matches remain, and the full pre-pagination match count. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/worldQueryPagination.test.ts`, `packages/script-runtime/tests/worldQueryFuzz.test.ts`, `packages/script-runtime/tests/authoringFieldSchemas.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `World.setEntityOwner` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `entity:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | entity_set_owner pending op carrying the TARGET entityId (the same op Entity.setOwner enqueues for the self entity). | Drained by stateFromScriptSetOwnerOp into an entity.owner_set patch carrying the previous and next Profile (I-19 journals every transfer). | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | script.entity_owner_unauthorized when the script is not attached to a Room Script host; script.entity_owner_invalid when the target entity is missing. | `server/tests/seatAndBodyBrainrotSlice.test.ts`, `packages/script-runtime/tests/worldTargetOwnershipAndTags.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `World.setEntityTag` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `entity:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | entity_tag_add pending op carrying the TARGET entityId. | Drained by the structural-mutation path into an entity.tag_add patch (same-world, rate-limited, the same authority World.despawn uses). | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | script.entity_mutation_target_not_authorized when the target is absent or outside the owner's world; script.entity_mutation_non_owner_rate_limited past the per-tick non-owner limit; script.entity_tag_missing for an empty tag. | `server/tests/seatAndBodyBrainrotSlice.test.ts`, `packages/script-runtime/tests/worldTargetOwnershipAndTags.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `World.spawn` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `entity:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `World.spawnMany` | keep_public_atom | runtime | An array of spawn configs, each identical in shape to ctx.world.spawn's config. At most SCRIPT_SPAWN_BATCH_MAX_ENTITIES (64) per call; an oversized array is rejected whole, never partially applied. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `entity:write` | Deterministic: N separate entity_spawn pending ops, whose ids derive from the existing (room, owner, script, tick, opIndex) seed. The Nth entity of a batch is byte-identical to the Nth of N single ctx.world.spawn calls. | N entity_spawn pending ops (prefab-shaped configs route to prefab_instantiate, exactly as ctx.world.spawn does). No new op type. | The existing entity_spawn drain, once per op, under the same per-execution spawn-entity budget the drain applies to every spawn route. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/atomSpawnMany.test.ts`, `server/tests/scriptSpawnBatchAndBounds.test.ts`, `server/tests/blueprint-ir-host-parity.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `World.spawnPrefab` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `entity:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | No pending op for pure reads; write/effect atoms enqueue a typed ScriptPendingOp. | Drained by server/src/modules/runtime/runtimeSystems.ts when the atom produces a pending op. | None for reads; writes emit typed Runtime state patches owned by the drain module. | None unless documented by the drain. | Projection follows Runtime snapshot/delta behavior for the affected state patch. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |
| `World.teleportPlayer` | keep_public_atom | runtime | Declared by the Script IR host node ports and generated SDK signature. | Executor validates primitive argument shape before enqueue/read; Runtime validates authoritative mutations before state patches. | `world:write` | Deterministic inside one script tick unless the host is an explicit browser/client bridge. | teleport_player pending op. | Runtime script system issues a Warehouse-backed teleport handoff. | Private teleport handoff projection. | Runtime teleport handoff effect. | Private client/player projection only. | Invalid inputs or unauthorized mutations produce structured script diagnostics or Runtime corrections. | `packages/script-runtime/tests/runtime.test.ts` | `docs/spec/generated/script-node-catalog.md`, `docs/spec/generated/script-sdk.md` | Launch public atom with no helper aliases. |

## All Nodes

| Node | Kind | Category | IR | Host | Effect tags | SDK path |
| --- | --- | --- | --- | --- | --- | --- |
| `core.arithmetic` | core | Values | `arithmetic` |  | `pure` | None |
| `core.array.first` | core | Values | `array.first` |  | `pure` | None |
| `core.array.for_each` | core | Control | `array.forEach` |  | `pure` | None |
| `core.array.get` | core | Values | `array.get` |  | `pure` | None |
| `core.array.length` | core | Values | `array.length` |  | `pure` | None |
| `core.array.mutate` | core | Values | `array.mutate` |  | `pure` | None |
| `core.array.query` | core | Values | `array.query` |  | `pure` | None |
| `core.array.reduce` | core | Values | `array.reduce` |  | `pure` | None |
| `core.array.transform` | core | Values | `array.transform` |  | `pure` | None |
| `core.bitwise` | core | Values | `bitwise` |  | `pure` | None |
| `core.boolean` | core | Values | `boolean` |  | `pure` | None |
| `core.bounded.for` | core | Control | `bounded.for` |  | `pure` | None |
| `core.bounded.while` | core | Control | `bounded.while` |  | `pure` | None |
| `core.comparison` | core | Values | `comparison` |  | `pure` | None |
| `core.component.patch` | core | Components | `component.patch` |  | `writeState` | None |
| `core.component.read` | core | Components | `component.read` |  | `pure` | None |
| `core.entity.id` | core | Values | `entity.id` |  | `pure` | None |
| `core.event.key` | core | Events | `event.key` |  | `pure` | None |
| `core.event.payload.get` | core | Events | `event.payload.get` |  | `pure` | None |
| `core.expression.codebox` | core | Values | `expression.codebox` |  | `pure` | None |
| `core.flow.break` | core | Control | `flow.break` |  | `pure` | None |
| `core.flow.continue` | core | Control | `flow.continue` |  | `pure` | None |
| `core.flow.do_n` | core | Control | `flow.doN` |  | `writeState` | None |
| `core.flow.do_once` | core | Control | `flow.doOnce` |  | `writeState` | None |
| `core.flow.flip_flop` | core | Control | `flow.flipFlop` |  | `writeState` | None |
| `core.flow.gate` | core | Control | `flow.gate` |  | `writeState` | None |
| `core.flow.multi_gate` | core | Control | `flow.multiGate` |  | `writeState` | None |
| `core.flow.return` | core | Control | `flow.return` |  | `pure` | None |
| `core.flow.timer.after` | core | Control | `flow.timer.after` |  | `emitEvent` | None |
| `core.flow.timer.cancel` | core | Control | `flow.timer.cancel` |  | `emitEvent` | None |
| `core.get` | core | Values | `get` |  | `pure` | None |
| `core.host.call` | core | Effects | `host.call` |  | `emitEvent` | None |
| `core.if` | core | Control | `if` |  | `pure` | None |
| `core.let` | core | Values | `let` |  | `pure` | None |
| `core.map` | core | Values | `map` |  | `pure` | None |
| `core.math.remap` | core | Values | `math.remap` |  | `pure` | None |
| `core.math` | core | Values | `math` |  | `pure` | None |
| `core.not` | core | Values | `not` |  | `pure` | None |
| `core.object` | core | Values | `object` |  | `pure` | None |
| `core.quat` | core | Values | `quat` |  | `pure` | None |
| `core.record.get` | core | Values | `record.get` |  | `pure` | None |
| `core.select` | core | Values | `select` |  | `pure` | None |
| `core.sequence` | core | Control | `sequence` |  | `pure` | None |
| `core.set` | core | Values | `set` |  | `pure` | None |
| `core.string` | core | Values | `string` |  | `pure` | None |
| `core.switch` | core | Control | `switch` |  | `pure` | None |
| `core.value.array` | core | Values | `value.array` |  | `pure` | None |
| `core.value.assert` | core | Values | `value.assert` |  | `pure` | None |
| `core.value.cast` | core | Values | `value.cast` |  | `pure` | None |
| `core.value.coerce` | core | Values | `value.coerce` |  | `pure` | None |
| `core.value.literal` | core | Values | `value.literal` |  | `pure` | None |
| `core.value.object` | core | Values | `value.object` |  | `pure` | None |
| `core.vec3` | core | Values | `vec3` |  | `pure` | None |
| `event.action` | event | Events | `onActionResolved` |  | `readWorld` | None |
| `event.character_removed` | event | Events | `onCharacterRemoved` |  | `readWorld` | None |
| `event.character_spawned` | event | Events | `onCharacterSpawned` |  | `readWorld` | None |
| `event.custom` | event | Events | `onCustomEvent` |  | `readWorld` | None |
| `event.frame` | event | Events | `onFrame` |  | `readWorld` | None |
| `event.init` | event | Events | `onInit` |  | `readWorld` | None |
| `event.match_ended` | event | Events | `onMatchEnded` |  | `readWorld` | None |
| `event.network_message` | event | Events | `onNetworkMessage` |  | `readWorld` | None |
| `event.panel_action` | event | Events | `onPanelAction` |  | `readWorld` | None |
| `event.phase_exit` | event | Events | `onPhaseExit` |  | `readWorld` | None |
| `event.phase` | event | Events | `onPhaseEnter` |  | `readWorld` | None |
| `event.player_joined` | event | Events | `onPlayerJoined` |  | `readWorld` | None |
| `event.player_left` | event | Events | `onPlayerLeft` |  | `readWorld` | None |
| `event.purchase_fulfilled` | event | Events | `onPurchaseFulfilled` |  | `readWorld` | None |
| `event.resize` | event | Events | `onResize` |  | `readWorld` | None |
| `event.start` | event | Events | `onStart` |  | `readWorld` | None |
| `event.tick` | event | Events | `onTick` |  | `readWorld` | None |
| `event.timer` | event | Events | `onTimerFired` |  | `readWorld` | None |
| `event.trigger_exit` | event | Events | `onTriggerExit` |  | `readWorld` | None |
| `event.trigger` | event | Events | `onTriggerEnter` |  | `readWorld` | None |
| `event.widget_press` | event | Events | `onWidgetPress` |  | `readWorld` | None |
| `host.audio.play_spatial` | host | Audio | `host.call` | `Audio.playSpatial` | `audioEffect`, `networked`, `nonRollbackable` | `ctx.audio.playSpatial` |
| `host.audio.play` | host | Audio | `host.call` | `Audio.play` | `audioEffect`, `networked`, `nonRollbackable` | `ctx.audio.play` |
| `host.audio.set_background_music` | host | Audio | `host.call` | `Audio.setBackgroundMusic` | `audioEffect`, `nonRollbackable` | `ctx.audio.setBackgroundMusic` |
| `host.audio.set_volume` | host | Audio | `host.call` | `Audio.setVolume` | `audioEffect` | `ctx.audio.setVolume` |
| `host.audio.stop` | host | Audio | `host.call` | `Audio.stop` | `audioEffect` | `ctx.audio.stop` |
| `host.camera.add_look_input` | host | Platform | `host.call` | `Camera.addLookInput` | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `ctx.camera.addLookInput` |
| `host.camera.set_look_sensitivity` | host | Platform | `host.call` | `Camera.setLookSensitivity` | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `ctx.camera.setLookSensitivity` |
| `host.camera.set_pitch_clamp` | host | Platform | `host.call` | `Camera.setPitchClamp` | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `ctx.camera.setPitchClamp` |
| `host.camera.set_view_target` | host | Platform | `host.call` | `Camera.setViewTarget` | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `ctx.camera.setViewTarget` |
| `host.commerce.owns` | host | Platform | `host.call` | `Commerce.owns` | `readState` | `ctx.commerce.owns` |
| `host.commerce.prompt_purchase` | host | Platform | `host.call` | `Commerce.promptPurchase` | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `ctx.commerce.promptPurchase` |
| `host.debug.log` | host | Debug | `host.call` | `Debug.log` | `emitEvent` | `ctx.log` |
| `host.entity.add_component` | host | Components | `host.call` | `Entity.addComponent` | `writeState`, `writeWorld`, `requiresAuthority` | `ctx.entity.addComponent` |
| `host.entity.ancestors` | host | World | `host.call` | `Entity.ancestors` | `readWorld`, `readState` | `ctx.entity.ancestors` |
| `host.entity.children` | host | World | `host.call` | `Entity.children` | `readWorld`, `readState` | `ctx.entity.children` |
| `host.entity.descendants` | host | World | `host.call` | `Entity.descendants` | `readWorld`, `readState` | `ctx.entity.descendants` |
| `host.entity.detach` | host | World | `host.call` | `Entity.detach` | `writeState`, `writeWorld`, `requiresAuthority` | `ctx.entity.detach` |
| `host.entity.has_tag` | host | World | `host.call` | `Entity.hasTag` | `readWorld`, `readState` | `ctx.entity.hasTag` |
| `host.entity.parent` | host | World | `host.call` | `Entity.parent` | `readWorld`, `readState` | `ctx.entity.parent` |
| `host.entity.patch_component` | host | Components | `host.call` | `Entity.patchComponent` | `writeState`, `writeWorld`, `requiresAuthority` | `ctx.entity.patchComponent` |
| `host.entity.read_component` | host | Components | `host.call` | `Entity.readComponent` | `readState`, `readWorld` | `ctx.entity.readComponent` |
| `host.entity.remove_component` | host | Components | `host.call` | `Entity.removeComponent` | `writeState`, `writeWorld`, `requiresAuthority` | `ctx.entity.removeComponent` |
| `host.entity.remove_tag` | host | World | `host.call` | `Entity.removeTag` | `writeState`, `writeWorld`, `requiresAuthority` | `ctx.entity.removeTag` |
| `host.entity.replace_component` | host | Components | `host.call` | `Entity.replaceComponent` | `writeState`, `writeWorld`, `requiresAuthority` | `ctx.entity.replaceComponent` |
| `host.entity.set_name` | host | World | `host.call` | `Entity.setName` | `writeState`, `writeWorld`, `requiresAuthority` | `ctx.entity.setName` |
| `host.entity.set_owner` | host | World | `host.call` | `Entity.setOwner` | `writeWorld`, `writeState`, `requiresAuthority` | `ctx.entity.setOwner` |
| `host.entity.set_parent` | host | World | `host.call` | `Entity.setParent` | `writeState`, `writeWorld`, `requiresAuthority` | `ctx.entity.setParent` |
| `host.entity.set_tag` | host | World | `host.call` | `Entity.setTag` | `writeState`, `writeWorld`, `requiresAuthority` | `ctx.entity.setTag` |
| `host.entity.world_position` | host | World | `host.call` | `Entity.worldPosition` | `readWorld`, `readState` | `ctx.entity.worldPosition` |
| `host.entity.world_rotation` | host | World | `host.call` | `Entity.worldRotation` | `readWorld`, `readState` | `ctx.entity.worldRotation` |
| `host.events.emit` | host | Events | `host.call` | `Events.emit` | `emitEvent` | `ctx.events.emit` |
| `host.fx.decal` | host | Effects | `host.call` | `Fx.decal` | `networked`, `nonRollbackable` | `ctx.fx.decal` |
| `host.fx.particle_burst` | host | Effects | `host.call` | `Fx.particleBurst` | `networked`, `nonRollbackable` | `ctx.fx.particleBurst` |
| `host.inventory.grant` | host | Match & Players | `host.call` | `Inventory.grant` | `writeState`, `emitEvent`, `durable`, `requiresAuthority` | `ctx.inventory.grant` |
| `host.match.add_score` | host | Match & Players | `host.call` | `Match.addScore` | `writeState`, `emitEvent`, `requiresAuthority` | `ctx.match.addScore` |
| `host.match.get_score` | host | Match & Players | `host.call` | `Match.getScore` | `readState` | `ctx.match.getScore` |
| `host.match.get_state` | host | Match & Players | `host.call` | `Match.getState` | `readState` | `ctx.match.getState` |
| `host.match.patch_objective` | host | Match & Players | `host.call` | `Match.patchObjective` | `writeState`, `emitEvent`, `requiresAuthority` | `ctx.match.patchObjective` |
| `host.match.set_phase` | host | Match & Players | `host.call` | `Match.setPhase` | `writeState`, `emitEvent`, `requiresAuthority` | `ctx.match.setPhase` |
| `host.navigation.find_path` | host | Physics | `host.call` | `Navigation.findPath` | `readWorld` | `ctx.navigation.findPath` |
| `host.navigation.is_reachable` | host | Physics | `host.call` | `Navigation.isReachable` | `readWorld` | `ctx.navigation.isReachable` |
| `host.navigation.nearest_point` | host | Physics | `host.call` | `Navigation.nearestPoint` | `readWorld` | `ctx.navigation.nearestPoint` |
| `host.navigation.raycast` | host | Physics | `host.call` | `Navigation.raycast` | `readWorld` | `ctx.navigation.raycast` |
| `host.navigation.steer_toward` | host | Physics | `host.call` | `Navigation.steerToward` | `readWorld` | `ctx.navigation.steerToward` |
| `host.network.send_message` | host | Events | `host.call` | `Network.sendMessage` | `emitEvent`, `networked`, `nonRollbackable` | `ctx.network.sendMessage` |
| `host.physics.command` | host | Physics | `host.call` | `Physics.command` | `physicsCommand`, `writeWorld`, `requiresAuthority` | `ctx.physics.command` |
| `host.physics.occupancy_query` | host | Physics | `host.call` | `Physics.occupancyQuery` | `readWorld` | `ctx.physics.occupancyQuery` |
| `host.physics.overlap_test` | host | Physics | `host.call` | `Physics.overlapTest` | `readWorld` | `ctx.physics.overlapTest` |
| `host.physics.raycast` | host | Physics | `host.call` | `Physics.raycast` | `readWorld` | `ctx.physics.raycast` |
| `host.physics.shapecast` | host | Physics | `host.call` | `Physics.shapecast` | `readWorld` | `ctx.physics.shapecast` |
| `host.platform.exit_fullscreen` | host | Platform | `host.call` | `Platform.exitFullscreen` | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `ctx.platform.exitFullscreen` |
| `host.platform.exit_pointer_lock` | host | Platform | `host.call` | `Platform.exitPointerLock` | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `ctx.platform.exitPointerLock` |
| `host.platform.request_fullscreen` | host | Platform | `host.call` | `Platform.requestFullscreen` | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `ctx.platform.requestFullscreen` |
| `host.platform.request_pointer_lock` | host | Platform | `host.call` | `Platform.requestPointerLock` | `platformRequest`, `nonRollbackable`, `requiresAuthority` | `ctx.platform.requestPointerLock` |
| `host.player.eliminate` | host | Match & Players | `host.call` | `Player.eliminate` | `writeWorld`, `requiresAuthority` | `ctx.players.eliminate` |
| `host.player.possess` | host | Match & Players | `host.call` | `Player.possess` | `writeWorld`, `requiresAuthority` | `ctx.players.possess` |
| `host.player.release` | host | Match & Players | `host.call` | `Player.release` | `writeWorld`, `requiresAuthority` | `ctx.players.release` |
| `host.player.spawn_character` | host | Match & Players | `host.call` | `Player.spawnCharacter` | `spawnEntity`, `writeWorld`, `requiresAuthority` | `ctx.players.spawnCharacter` |
| `host.players.get` | host | Match & Players | `host.call` | `Players.get` | `readWorld` | `ctx.players.get` |
| `host.players.list` | host | Match & Players | `host.call` | `Players.list` | `readWorld` | `ctx.players.list`, `ctx.room.getPlayers` |
| `host.program.input_actions` | host | Values | `host.call` | `Program.inputActions` | `pure` | `ctx.program.inputActions` |
| `host.program.input_bundle` | host | Values | `host.call` | `Program.inputBundle` | `pure` | `ctx.program.inputBundle` |
| `host.program.input_flags` | host | Values | `host.call` | `Program.inputFlags` | `pure` | `ctx.program.inputFlags` |
| `host.program.param_count` | host | Values | `host.call` | `Program.paramCount` | `pure` | `ctx.program.paramCount` |
| `host.program.param` | host | Values | `host.call` | `Program.param` | `pure` | `ctx.program.param` |
| `host.random.bool` | host | Values | `host.call` | `Random.bool` | `pure` | `ctx.random.bool` |
| `host.random.gaussian` | host | Values | `host.call` | `Random.gaussian` | `pure` | `ctx.random.gaussian` |
| `host.random.int` | host | Values | `host.call` | `Random.int` | `pure` | `ctx.random.int` |
| `host.random.next` | host | Values | `host.call` | `Random.next` | `pure` | `ctx.random` |
| `host.random.pick` | host | Values | `host.call` | `Random.pick` | `pure` | `ctx.random.pick` |
| `host.random.point_in_circle` | host | Values | `host.call` | `Random.pointInCircle` | `pure` | `ctx.random.pointInCircle` |
| `host.random.point_in_sphere` | host | Values | `host.call` | `Random.pointInSphere` | `pure` | `ctx.random.pointInSphere` |
| `host.random.range` | host | Values | `host.call` | `Random.range` | `pure` | `ctx.random.range` |
| `host.random.seeded` | host | Values | `host.call` | `Random.seeded` | `pure` | `ctx.random.seeded` |
| `host.random.shuffle` | host | Values | `host.call` | `Random.shuffle` | `pure` | `ctx.random.shuffle` |
| `host.random.sign` | host | Values | `host.call` | `Random.sign` | `pure` | `ctx.random.sign` |
| `host.random.unit_vector` | host | Values | `host.call` | `Random.unitVector` | `pure` | `ctx.random.unitVector` |
| `host.random.weighted_pick` | host | Values | `host.call` | `Random.weightedPick` | `pure` | `ctx.random.weightedPick` |
| `host.room.get_players` | host | Match & Players | `host.call` | `Room.getPlayers` | `readState`, `readWorld` | `ctx.room.getPlayers` |
| `host.room.get_state` | host | Match & Players | `host.call` | `Room.getState` | `readState`, `readWorld` | `ctx.room.getState` |
| `host.team.get_assignment` | host | Match & Players | `host.call` | `Team.getAssignment` | `readState`, `readWorld` | `ctx.team.getAssignment` |
| `host.terrain.height_at` | host | Physics | `host.call` | `Terrain.heightAt` | `readWorld` | `ctx.terrain.heightAt` |
| `host.terrain.normal_at` | host | Physics | `host.call` | `Terrain.normalAt` | `readWorld` | `ctx.terrain.normalAt` |
| `host.terrain.raycast_down` | host | Physics | `host.call` | `Terrain.raycastDown` | `readWorld` | `ctx.terrain.raycastDown` |
| `host.terrain.sample_layer_weights` | host | Physics | `host.call` | `Terrain.sampleLayerWeights` | `readWorld` | `ctx.terrain.sampleLayerWeights` |
| `host.terrain.slope_at` | host | Physics | `host.call` | `Terrain.slopeAt` | `readWorld` | `ctx.terrain.slopeAt` |
| `host.tween.cancel` | host | Physics | `host.call` | `Tween.cancel` | `writeWorld`, `requiresAuthority` | `ctx.tween.cancel` |
| `host.tween.start` | host | Physics | `host.call` | `Tween.start` | `writeWorld`, `requiresAuthority` | `ctx.tween.start` |
| `host.ui.close_panel` | host | UI | `host.call` | `UI.closePanel` | `uiEffect`, `nonRollbackable` | `ctx.ui.closePanel` |
| `host.ui.open_panel` | host | UI | `host.call` | `UI.openPanel` | `uiEffect`, `nonRollbackable` | `ctx.ui.openPanel` |
| `host.ui.set_widget_value` | host | UI | `host.call` | `UI.setWidgetValue` | `uiEffect`, `nonRollbackable` | `ctx.ui.setWidgetValue` |
| `host.warehouse.append` | host | Persistence | `host.call` | `Warehouse.append` | `writeState`, `durable`, `requiresAuthority` | `ctx.warehouse.append` |
| `host.warehouse.create` | host | Persistence | `host.call` | `Warehouse.create` | `writeState`, `durable`, `requiresAuthority` | `ctx.warehouse.create` |
| `host.warehouse.delete` | host | Persistence | `host.call` | `Warehouse.delete` | `writeState`, `durable`, `requiresAuthority` | `ctx.warehouse.delete` |
| `host.warehouse.get` | host | Persistence | `host.call` | `Warehouse.get` | `readState`, `durable` | `ctx.warehouse.get` |
| `host.warehouse.increment` | host | Persistence | `host.call` | `Warehouse.increment` | `writeState`, `durable`, `requiresAuthority` | `ctx.warehouse.increment` |
| `host.warehouse.query` | host | Persistence | `host.call` | `Warehouse.query` | `readState`, `durable` | `ctx.warehouse.query` |
| `host.warehouse.set` | host | Persistence | `host.call` | `Warehouse.set` | `writeState`, `durable`, `requiresAuthority` | `ctx.warehouse.set` |
| `host.warehouse.transform` | host | Persistence | `host.call` | `Warehouse.transform` | `writeState`, `durable`, `requiresAuthority` | `ctx.warehouse.transform` |
| `host.warehouse.update` | host | Persistence | `host.call` | `Warehouse.update` | `writeState`, `durable`, `requiresAuthority` | `ctx.warehouse.update` |
| `host.water.is_submerged` | host | Physics | `host.call` | `Water.isSubmerged` | `readWorld` | `ctx.water.isSubmerged` |
| `host.water.surface_level_at` | host | Physics | `host.call` | `Water.surfaceLevelAt` | `readWorld` | `ctx.water.surfaceLevelAt` |
| `host.world.despawn` | host | World | `host.call` | `World.despawn` | `despawnEntity`, `writeWorld`, `requiresAuthority` | `ctx.world.despawn` |
| `host.world.entity_has_tag` | host | World | `host.call` | `World.entityHasTag` | `readWorld`, `readState` | `ctx.world.entityHasTag` |
| `host.world.find` | host | World | `host.call` | `World.find` | `readWorld` | `ctx.world.find` |
| `host.world.query` | host | World | `host.call` | `World.query` | `readWorld` | `ctx.world.query` |
| `host.world.set_entity_owner` | host | World | `host.call` | `World.setEntityOwner` | `writeWorld`, `writeState`, `requiresAuthority` | `ctx.world.setEntityOwner` |
| `host.world.set_entity_tag` | host | World | `host.call` | `World.setEntityTag` | `writeState`, `writeWorld`, `requiresAuthority` | `ctx.world.setEntityTag` |
| `host.world.spawn_many` | host | World | `host.call` | `World.spawnMany` | `spawnEntity`, `writeWorld`, `requiresAuthority` | `ctx.world.spawnMany` |
| `host.world.spawn_prefab` | host | World | `host.call` | `World.spawnPrefab` | `spawnEntity`, `writeWorld`, `requiresAuthority` | `ctx.world.spawnPrefab` |
| `host.world.spawn` | host | World | `host.call` | `World.spawn` | `spawnEntity`, `writeWorld`, `requiresAuthority` | `ctx.world.spawn` |
| `host.world.teleport_player` | host | World | `host.call` | `World.teleportPlayer` | `writeWorld`, `networked`, `nonRollbackable`, `requiresAuthority` | `ctx.world.teleportPlayer` |

## Node Details

One section per node, keyed by node id, so a reference to a node id resolves to its own anchor. Each carries the node description and its first example.

### core.arithmetic

Applies a numeric operator.

```
{ "op": "arithmetic", "operator": "add", "left": {}, "right": {} }
```

### core.array.first

Reads the first typed item from an array.

```
{ "op": "array.first", "array": { "op": "get", "path": ["targets"], "valueType": "entity_array" }, "valueType": "entity" }
```

### core.array.for_each

Iterates a typed array with a bounded execution budget.

```
{ "op": "array.forEach", "array": { "op": "get", "path": ["targets"], "valueType": "entity_array" }, "item": "target", "itemType": "entity", "maxIterations": 32, "body": [] }
```

### core.array.get

Reads one typed item from an array by index.

```
{ "op": "array.get", "array": { "op": "get", "path": ["targets"], "valueType": "entity_array" }, "index": { "op": "value.literal", "value": 0 }, "valueType": "entity" }
```

### core.array.length

Counts items in a typed array value.

```
{ "op": "array.length", "array": { "op": "value.array", "items": [] } }
```

### core.array.mutate

Functional array update: push, addUnique, insert, removeAt, removeValue, clear, set, unique, reverse - returns a NEW array (no in-place mutation). Write it back to a component via Patch (ATOM-5).

```
{ "op": "array.mutate", "operator": "push", "array": {}, "value": {} }
```

### core.array.query

Pure array reads: contains (by value), indexOf (by value; UE Find), last, join, slice, concat. No predicate, matching UE (ATOM-6).

```
{ "op": "array.query", "operator": "join", "array": {}, "separator": {} }
```

### core.array.reduce

Fold an array down to a single accumulated value with a per-item expression over a bounded slice. The array-algebra ELIMINATE: the dual of the build ops (Make Array / Add). `item` binds the current element, `accumulator` binds the running total; both read via Get (ATOM-7).

```
{ "op": "array.reduce", "array": {}, "seed": {}, "item": "x", "accumulator": "acc", "accumulatorType": "number", "maxIterations": 16, "expr": {} }
```

### core.array.transform

map / filter / sortBy / find / some / every over an array with a per-item expression and a bounded iteration budget. A forEach-shaped special form with a named item binding - NOT a lambda. map/filter/sortBy return an array; find returns the matching item; some/every return a boolean (ATOM-7).

```
{ "op": "array.transform", "operator": "map", "array": {}, "item": "x", "itemType": "number", "maxIterations": 16, "expr": {} }
```

### core.bitwise

Integer bit-algebra: and, or, xor, not, shl, shr, ushr. Operands and result are numbers with exact JavaScript ToInt32 semantics (ushr is ToUint32); shift counts are masked to 5 bits. Pairs with Math.imul32 for integer hashing, noise, and u32 pixel packing (ATOM-1).

```
{ "op": "bitwise", "operator": "and", "a": {}, "b": {} }
```

### core.boolean

Combines two boolean values.

```
{ "op": "boolean", "operator": "and", "left": {}, "right": {} }
```

### core.bounded.for

Runs a for loop with a maximum iteration budget.

```
{ "op": "bounded.for", "iterator": "i", "from": {}, "to": {}, "maxIterations": 10, "body": [] }
```

### core.bounded.while

Runs a while loop with a maximum iteration budget.

```
{ "op": "bounded.while", "test": {}, "maxIterations": 10, "body": [] }
```

### core.comparison

Compares two values. eqi / nei check case-insensitive string equality / inequality (UE Equal (String) ignore-case).

```
{ "op": "comparison", "operator": "gte", "left": {}, "right": {} }
```

### core.component.patch

Buffers an authoritative component patch.

```
{ "op": "component.patch", "componentType": "TransformComponent", "patch": { "position": { "x": 0, "y": 1, "z": 0 } } }
```

### core.component.read

Reads a component from the owning entity or a specified entity.

```
{ "op": "component.read", "componentType": "TransformComponent", "fields": ["position"] }
```

### core.entity.id

Reads an entity's ID. With no input, uses the entity running this script.

```
{ "op": "entity.id" }
```

### core.event.key

Reads the semantic key from the current runtime event.

```
{ "op": "event.key" }
```

### core.event.payload.get

Reads a typed value from the current event payload.

```
{ "op": "event.payload.get", "path": ["entityId"], "valueType": "string" }
```

### core.expression.codebox

Author a value as a freeform GessaScript expression instead of wiring value nodes. The text is parsed to a real, type-checked expression tree (W2-C); its result type is the inner expression's type.

```
{ "op": "expression.codebox", "expression": { "op": "value.literal", "value": 1 } }
```

### core.flow.break

Stops the enclosing loop immediately and continues after it.

```
break;
```

### core.flow.continue

Skips the rest of this iteration and advances the enclosing loop to the next one.

```
continue;
```

### core.flow.do_n

Runs its body the first N times it is reached, then blocks until reset. UE DoN (ATOM-12).

```
{ "op": "flow.doN", "stateKey": "burst", "n": { "op": "value.literal", "value": 3 }, "body": [] }
```

### core.flow.do_once

Runs its body the first time it is reached, then blocks until reset. UE DoOnce (ATOM-12).

```
{ "op": "flow.doOnce", "stateKey": "intro", "body": [] }
```

### core.flow.flip_flop

Alternates between the A and B branches on each reach (A first). UE FlipFlop (ATOM-12).

```
{ "op": "flow.flipFlop", "stateKey": "toggle", "a": [], "b": [] }
```

### core.flow.gate

Open/closed pass-through. `enter` runs the body only while open; `open`/`close`/`toggle` set the latch. UE Gate (ATOM-12).

```
{ "op": "flow.gate", "stateKey": "spawnGate", "action": "enter", "body": [] }
```

### core.flow.multi_gate

Routes to one of N branches: cycle in order, seeded-random, or once-each. UE MultiGate (ATOM-12). Random uses the seeded RNG.

```
{ "op": "flow.multiGate", "stateKey": "spread", "mode": "cycle", "branches": [] }
```

### core.flow.return

Stops the current event handler (or function) immediately; nothing after it runs.

```
return;
```

### core.flow.timer.after

Schedules a latent continuation: after `seconds` (measured in ticks) the `resumeEvent` handler is re-entered. UE Delay (ATOM-13).

```
{ "op": "flow.timer.after", "seconds": { "op": "value.literal", "value": 2 }, "resumeEvent": "onDelayComplete" }
```

### core.flow.timer.cancel

Cancels a pending latent timer by key before it fires; the schedule<->cancel dual of Timer After (ATOM-13).

```
cancel timer "reload";
```

### core.get

Reads a bound variable or context path, preserving optional type evidence for a path whose declared type is unknown.

```
{ "op": "get", "path": ["ctx", "delta"] }
```

### core.host.call

Calls a declared runtime host function.

```
{ "op": "host.call", "host": { "namespace": "Debug", "name": "log" }, "args": [] }
```

### core.if

Runs one of two statement branches.

```
{ "op": "if", "test": { "op": "value.literal", "value": true }, "then": [], "else": [] }
```

### core.let

Binds an expression to a local constant.

```
{ "op": "let", "name": "score", "value": { "op": "value.literal", "value": 0 } }
```

### core.map

String-keyed map container: make, add, remove, contains, get, keys, values, length, merge. Functional (no in-place mutation); deterministic insertion-order iteration (ATOM-15).

```
{ "op": "map", "operator": "add", "map": {}, "key": {}, "value": {} }
```

### core.math

Numeric library: min, max, abs, floor, ceil, round, clamp, sqrt, pow, sign, lerp, sin, cos, tan, asin, acos, atan, atan2, exp, ln, log10, log2, deg2rad, rad2deg, wrapAngle, smoothstep, imul32. The operator enum is the whole float/int library in one node (ATOM-1); imul32 is the 32-bit modular multiply (Math.imul) that pairs with the Bitwise node for integer hashing.

```
{ "op": "math", "operator": "abs", "a": {} }
```

### core.math.remap

Re-scale a value from an input range [inMin, inMax] onto an output range [outMin, outMax], linearly. The five-operand gameplay staple (health bars, aim assist) that does not fit Math's a/b/c ternary shape, so it is its own op. Not clamped - pair with Clamp to bound it.

```
{ "op": "math.remap", "value": {}, "inMin": {}, "inMax": {}, "outMin": {}, "outMax": {} }
```

### core.not

Negates a boolean value.

```
{ "op": "not", "value": { "op": "value.literal", "value": false } }
```

### core.object

Functional record update + enumeration: set (one field) / merge (two objects) / delete (drop a field) return a NEW object; keys / entries / has read the record (dynamic-key enumeration; ATOM-8).

```
{ "op": "object", "operator": "merge", "target": {}, "source": {} }
```

### core.quat

Quaternion rotation: make, multiply, slerp, fromEuler, toEuler, lookAt, rotateVector, inverse. Promotes the runtime Quaternion helpers; makes TransformComponent rotation ergonomic (ATOM-4).

```
{ "op": "quat", "operator": "fromEuler", "euler": {} }
```

### core.record.get

Reads a typed field from an object, component, warehouse record, query result, or event payload object.

```
{ "op": "record.get", "record": { "op": "get", "path": ["progress"], "valueType": "data_record" }, "path": ["score"], "valueType": "number" }
```

### core.select

Pure data multiplexer: returns ifTrue when condition is true, else ifFalse. UE Select - no exec branch (ATOM-9).

```
{ "op": "select", "condition": {}, "ifTrue": {}, "ifFalse": {}, "valueType": "number" }
```

### core.sequence

Runs child statements in order.

```
{ "op": "sequence", "body": [] }
```

### core.set

Assigns a value to a variable or path.

```
{ "op": "set", "path": ["state"], "value": { "op": "value.literal", "value": 1 } }
```

### core.string

String operations: concat, length, format, contains, split, upper, lower, replace, substring, trim, startsWith, endsWith, indexOf. The operator enum composes dynamic HUD text and keys (ATOM-2).

```
{ "op": "string", "operator": "concat", "a": {}, "b": {} }
```

### core.switch

Multi-way branch on an int / enum / string value: runs the matching case body, else the default. UE Switch (ATOM-9).

```
{ "op": "switch", "on": {}, "cases": [], "default": [] }
```

### core.value.array

Creates an array from item expressions.

```
{ "op": "value.array", "items": [] }
```

### core.value.assert

Asserts a runtime value has the expected primitive type before using it.

```
{ "op": "value.assert", "expectedType": "number", "value": { "op": "get", "path": ["score"], "valueType": "number" } }
```

### core.value.cast

Marks a value as a known Script IR type after an explicit authoring decision.

```
{ "op": "value.cast", "to": "entity", "value": { "op": "value.literal", "value": "entity.target" } }
```

### core.value.coerce

Safely coerces a value to string, number, boolean, or entity id with an optional fallback.

```
{ "op": "value.coerce", "to": "number", "value": { "op": "event.payload.get", "path": ["score"], "valueType": "json" }, "defaultValue": { "op": "value.literal", "value": 0 } }
```

### core.value.literal

Creates a string, number, boolean, or null value.

```
{ "op": "value.literal", "value": 1 }
```

### core.value.object

Creates an object from named entry expressions.

```
{ "op": "value.object", "entries": {} }
```

### core.vec3

Vector3 algebra: add, sub, scale, dot, cross, length, normalize, distance, lerp, make, reflect, moveTowards, project, angleBetween, clampLength. Promotes the runtime Vector3 helpers to visual authoring (ATOM-3).

```
{ "op": "vec3", "operator": "make", "x": {}, "y": {}, "z": {} }
```

### event.action

Runs after an authoritative input action resolves.

```
onActionResolved(ctx, event)
```

### event.character_removed

Runs when a seat's Character body is removed, whether the seat departed, was rebound, or was eliminated. Fires before Player Left for the same seat.

```
onCharacterRemoved(ctx, event)
```

### event.character_spawned

Runs when a Character body is spawned for a seat and bound to it. Fires after Player Joined for the same seat.

```
onCharacterSpawned(ctx, event)
```

### event.custom

Runs when a declared custom event is dispatched.

```
onCustomEvent(ctx, event)
```

### event.frame

Runs once per produced client frame.

```
onFrame(ctx, t, dt)
```

### event.init

Runs once when a client_frame program instance initializes.

```
onInit(ctx)
```

### event.match_ended

Runs when the match ends.

```
onMatchEnded(ctx, event)
```

### event.network_message

Runs when an authorized network message arrives.

```
onNetworkMessage(ctx, event)
```

### event.panel_action

Runs for an authored UI action from the player possessing this entity.

```
onPanelAction(ctx, event)
```

### event.phase

Runs when a match phase is entered.

```
onPhaseEnter(ctx, event)
```

### event.phase_exit

Runs when a match phase is exited.

```
onPhaseExit(ctx, event)
```

### event.player_joined

Runs when a player joins the runtime.

```
onPlayerJoined(ctx, event)
```

### event.player_left

Runs when a player leaves the runtime.

```
onPlayerLeft(ctx, event)
```

### event.purchase_fulfilled

Runs when a purchase settles for a seat in this room, after the entitlement and any item grant are durable; reach for it to react to a sale, never to grant what was bought.

```
onPurchaseFulfilled(ctx, event)
```

### event.resize

Runs when the program surface size changes.

```
onResize(ctx, width, height)
```

### event.start

Runs when the script starts.

```
onStart(ctx)
```

### event.tick

Runs once per runtime tick.

```
onTick(ctx, deltaSeconds)
```

### event.timer

Runs when a TimerComponent dispatches a timer event.

```
onTimerFired(ctx, event)
```

### event.trigger

Runs when another entity enters this entity's trigger.

```
onTriggerEnter(ctx, event)
```

### event.trigger_exit

Runs when another entity leaves this entity trigger.

```
onTriggerExit(ctx, event)
```

### event.widget_press

Runs for an authored UI action from the player possessing this entity.

```
onWidgetPress(ctx, event)
```

### host.audio.play

Plays a one-shot sound. options.audience scopes who hears it: 'room' (default), 'owner', {players:[...]}, or {except:[...]}. Delivered within the tick over the reliable event lane.

```
ctx.audio.play(assetId, options)
```

### host.audio.play_spatial

Plays a one-shot sound at a world position, attenuated by rolloff/refDistance/maxDistance (maxDistance is a hard silence radius). options.audience scopes who hears it. Delivered within the tick over the reliable event lane.

```
ctx.audio.playSpatial(assetId, position, options)
```

### host.audio.set_background_music

Requests background music playback by ProjectAsset UUID.

```
ctx.audio.setBackgroundMusic(assetId, options)
```

### host.audio.set_volume

Sets volume for an audio handle.

```
ctx.audio.setVolume(handle, volume)
```

### host.audio.stop

Stops an audio handle.

```
ctx.audio.stop(handle)
```

### host.camera.add_look_input

Adds a look delta to the client look controller this tick, on top of the player's own look input.

```
ctx.camera.addLookInput(delta)
```

### host.camera.set_look_sensitivity

Sets the client look controller sensitivity, in degrees of rotation per input unit.

```
ctx.camera.setLookSensitivity(degreesPerUnit)
```

### host.camera.set_pitch_clamp

Clamps the client look controller pitch between a minimum and maximum, in degrees.

```
ctx.camera.setPitchClamp(minDeg, maxDeg)
```

### host.camera.set_view_target

Points the client view at a target entity (optionally world-space offset), overriding free look until cleared.

```
ctx.camera.setViewTarget(target, offset)
```

### host.commerce.owns

Reads whether a seat holds an entitlement key from the durable entitlement facts; reach for it to gate content on a purchase without waiting for the fulfillment event.

```
ctx.commerce.owns(entitlementKey, playerSessionId)
```

### host.commerce.prompt_purchase

Opens the platform-owned purchase prompt for an offer on the addressed seat; reach for it when a script wants to sell an offer it never renders or confirms itself.

```
ctx.commerce.promptPurchase(offerKey, audience)
```

### host.debug.log

Writes a structured runtime log entry at the given level (default info).

```
ctx.log(message, metadata, level)
```

### host.entity.add_component

Adds a component through a canonical entity handle.

```
ctx.entity.addComponent(componentType, data)
```

### host.entity.ancestors

Reads ancestor entities.

```
ctx.entity.ancestors()
```

### host.entity.children

Reads child entities.

```
ctx.entity.children()
```

### host.entity.descendants

Reads descendant entities.

```
ctx.entity.descendants(options)
```

### host.entity.detach

Detaches an entity from its parent.

```
ctx.entity.detach(options)
```

### host.entity.has_tag

Checks a first-class entity tag.

```
ctx.entity.hasTag(tag)
```

### host.entity.parent

Reads the parent entity.

```
ctx.entity.parent()
```

### host.entity.patch_component

Patches a component through a canonical entity handle.

```
ctx.entity.patchComponent(componentType, patch)
```

### host.entity.read_component

Reads a component from a canonical entity handle.

```
ctx.entity.readComponent(componentTypeOrKey)
```

### host.entity.remove_component

Removes a component through a canonical entity handle.

```
ctx.entity.removeComponent(componentTypeOrKey)
```

### host.entity.remove_tag

Removes a first-class entity tag.

```
ctx.entity.removeTag(tag)
```

### host.entity.replace_component

Replaces a component through a canonical entity handle.

```
ctx.entity.replaceComponent(componentType, data)
```

### host.entity.set_name

Changes an entity's display name.

```
ctx.entity.setName(name)
```

### host.entity.set_owner

Writes the Profile that owns a thing, or clears it when the profile id is omitted. Room Script hosts only (I-19).

```
ctx.entity.setOwner(entityId, profileId)
```

### host.entity.set_parent

Parents one entity under another.

```
ctx.entity.setParent(parentId, options)
```

### host.entity.set_tag

Adds a first-class entity tag.

```
ctx.entity.setTag(tag)
```

### host.entity.world_position

Reads this entity's composed world-space position as a typed vector3, so a script can aim, offset, or measure distance from where the entity is this tick without decoding a component read.

```
ctx.entity.worldPosition()
```

### host.entity.world_rotation

Reads this entity's composed world-space rotation as a typed vector3 of Euler angles matching the Transform, so a script can derive facing or a forward direction without decoding a component read.

```
ctx.entity.worldRotation()
```

### host.events.emit

Emits a deterministic custom event.

```
ctx.events.emit(eventKey, payload, targetEntityId)
```

### host.fx.decal

Projects a one-shot decal as a presentation cue (a bounded subset of DecalComponent). options.audience scopes who sees it: 'room' (default), 'owner', {players:[...]}, or {except:[...]}. Cosmetic only - never mutates simulation. Delivered within the tick over the reliable event lane.

```
ctx.fx.decal(options)
```

### host.fx.particle_burst

Emits a one-shot particle burst as a presentation cue (a bounded subset of ParticleEmitterComponent). options.audience scopes who sees it: 'room' (default), 'owner', {players:[...]}, or {except:[...]}. Cosmetic only - never mutates simulation. Delivered within the tick over the reliable event lane; the seed derives from the cue id so a replayed tick is identical.

```
ctx.fx.particleBurst(options)
```

### host.inventory.grant

Grants a positive quantity of an item to a seat's inventory through the durable authority outbox; reach for it when gameplay earns an item outside a purchase.

```
ctx.inventory.grant(playerSessionId, itemKey, quantity, reason)
```

### host.match.add_score

Credits a signed score amount to a team or player subject on a match scoreboard.

```
ctx.match.addScore(subjectKey, amount, scoreboardKey, reason)
```

### host.match.get_score

Reads a subject's score total from the authoritative scoreboard snapshot (as of the last applied tick).

```
ctx.match.getScore(subjectKey, scoreboardKey)
```

### host.match.get_state

Reads match lifecycle state.

```
ctx.match.getState()
```

### host.match.patch_objective

Merges a partial state patch into a declarative match objective.

```
ctx.match.patchObjective(objectiveKey, patch, reason)
```

### host.match.set_phase

Requests a match phase transition.

```
ctx.match.setPhase(phaseKey, reason, metadata)
```

### host.navigation.find_path

Computes a walkable path between two world points for an agent profile.

```
ctx.navigation.findPath(worldId, from, to, agentProfileKey)
```

### host.navigation.is_reachable

Returns whether a walkable path exists between two world points.

```
ctx.navigation.isReachable(worldId, from, to, agentProfileKey)
```

### host.navigation.nearest_point

Returns the nearest walkable point to a world point, or null when off the walkable area.

```
ctx.navigation.nearestPoint(worldId, point, agentProfileKey)
```

### host.navigation.raycast

Line-of-walk between two world points; returns whether it is blocked and the hit point.

```
ctx.navigation.raycast(worldId, from, to, agentProfileKey)
```

### host.navigation.steer_toward

Takes one navmesh steering step toward a target, capped at Max Step. Returns whether the agent arrived, its next position and direction, and the distance remaining. Write Next to the agent's Position each tick; no second mover is created.

```
ctx.navigation.steerToward(worldId, from, to, maxStep, agentProfileKey)
```

### host.network.send_message

Sends a reliable network message to every subscribed client on a channel, or privately to one player session. Delivered within the tick over the reliable event lane.

```
ctx.network.sendMessage(channel, payload, playerId)
```

### host.physics.command

Changes one entity's physics body with a declared force, impulse, launch, torque, teleport, or reset command.

```
ctx.physics.command(entityId, bodyCommand)
```

### host.physics.occupancy_query

Reads the IDs of entities occupying a spatial cell.

```
ctx.physics.occupancyQuery(worldId, cellKey)
```

### host.physics.overlap_test

Tests a transformed shape against the physics query host.

```
ctx.physics.overlapTest(shape, transform, filter)
```

### host.physics.raycast

Casts a ray through the physics query host.

```
ctx.physics.raycast(origin, direction, distance, filter)
```

### host.physics.shapecast

Casts a shape through the physics query host.

```
ctx.physics.shapecast(shape, transform, direction, distance, filter)
```

### host.platform.exit_fullscreen

Queues exiting fullscreen on the client.

```
ctx.platform.exitFullscreen()
```

### host.platform.exit_pointer_lock

Queues exiting pointer lock on the client.

```
ctx.platform.exitPointerLock()
```

### host.platform.request_fullscreen

Queues a browser fullscreen request on the client.

```
ctx.platform.requestFullscreen(target)
```

### host.platform.request_pointer_lock

Queues a browser pointer-lock request on the client.

```
ctx.platform.requestPointerLock()
```

### host.player.eliminate

Eliminates the Character a seat possesses: journals the eliminated fact, releases the seat, and lets the character policy respawn it after its delay. Use it when authored damage decides a Player is out. Requires a Room Script host unless the seat is the one possessing this script's entity.

```
ctx.players.eliminate(playerSessionId, reason)
```

### host.player.possess

Binds a seat to an entity through the one possession writer. Requires a Room Script host unless the seat is the one possessing this script's entity.

```
ctx.players.possess(playerSessionId, entityId)
```

### host.player.release

Clears a seat's possession through the one possession writer. Requires a Room Script host unless the seat is the one possessing this script's entity.

```
ctx.players.release(playerSessionId, reason)
```

### host.player.spawn_character

Asks the character policy to spawn a body for a seat and bind it. Requires a Room Script host unless the seat is the one possessing this script's entity.

```
ctx.players.spawnCharacter(playerSessionId, options)
```

### host.players.get

Gets one Player by seat session id, or undefined when that seat is not on the live roster.

```
ctx.players.get(playerSessionId)
```

### host.players.list

Lists the live Player roster for this room: every seat that is joining, connected, or disconnected-resumable, in join order.

```
ctx.players.list()
```

### host.program.input_actions

Reads the held-action bitset of the current input bundle (pp-abi.v1 SPEC 4.4, byte offset 92) as a number: bit i is 1 when the declared action at index i is held this frame. Decode individual actions with the bitwise family, e.g. bitwise.and(Program.inputActions(), 1) tests action 0. Pure client-produce read; does not change the bundle.

```
ctx.program.inputActions()
```

### host.program.input_bundle

Copies the current 128-byte input bundle (pp-abi.v1 SPEC 4.4) into an array of number, one f64 slot per index: [0..3] look quaternion x/y/z/w; [4..6] camera world position x/y/z; [7..10] camera rotation quaternion x/y/z/w; [11] flags (bit 0 = pointerLocked) packed with the held-action bitset; [12..13] pointer delta x/y since last snapshot; [14..15] pointer position x/y normalized 0..1 over the surface. Pure read; the bundle is a copy, never live-mutated.

```
ctx.program.inputBundle()
```

### host.program.input_flags

Reads the flags word of the current input bundle (pp-abi.v1 SPEC 4.4, byte offset 88) as a number: bit 0 = pointerLocked. Decode with the bitwise family, e.g. bitwise.and(Program.inputFlags(), 1). Pure client-produce read; does not change the bundle.

```
ctx.program.inputFlags()
```

### host.program.param

Reads authored numeric parameter at the given exposed-field index (0-based, server-ordered, stable). Out-of-range indices read as 0 (pp-abi.v1 param_f64).

```
ctx.program.param(index)
```

### host.program.param_count

Returns the number of authored numeric parameters (the script's numeric exposed fields) available to this program instance (pp-abi.v1 param_count).

```
ctx.program.paramCount()
```

### host.random.bool

Returns true with probability p (default 0.5).

```
ctx.random.bool(p, stream)
```

### host.random.gaussian

Returns a Box-Muller normal sample with mean (default 0) and std (default 1).

```
ctx.random.gaussian(mean, std, stream)
```

### host.random.int

Returns an unbiased integer in [min, max] inclusive (rejection sampling).

```
ctx.random.int(min, max, stream)
```

### host.random.next

Returns the deterministic seeded random value.

```
ctx.random()
```

### host.random.pick

Returns a uniform element of the array; undefined for an empty array.

```
ctx.random.pick(array, stream)
```

### host.random.point_in_circle

Returns a uniform point inside the XZ-plane disk of the given radius (y = 0).

```
ctx.random.pointInCircle(radius, stream)
```

### host.random.point_in_sphere

Returns a uniform point inside the ball of the given radius.

```
ctx.random.pointInSphere(radius, stream)
```

### host.random.range

Returns a uniform float in [min, max).

```
ctx.random.range(min, max, stream)
```

### host.random.seeded

Creates a reproducible named PRNG stream: same seed yields the same sequence.

```
ctx.random.seeded(seed)
```

### host.random.shuffle

Returns a NEW Fisher-Yates shuffled array; the input is never mutated.

```
ctx.random.shuffle(array, stream)
```

### host.random.sign

Returns -1 or 1, uniform.

```
ctx.random.sign(stream)
```

### host.random.unit_vector

Returns a uniform direction on the unit sphere.

```
ctx.random.unitVector(stream)
```

### host.random.weighted_pick

Returns an element with probability proportional to weights; undefined for empty/zero-weight inputs.

```
ctx.random.weightedPick(items, weights, stream)
```

### host.room.get_players

Reads the room's connected-player roster (active participants, deterministic join order, bounded by room capacity - not by a query limit).

```
ctx.room.getPlayers()
```

### host.room.get_state

Reads room-level runtime state.

```
ctx.room.getState()
```

### host.team.get_assignment

Reads the current entity's team assignment.

```
ctx.team.getAssignment()
```

### host.terrain.height_at

Reads the terrain surface height (world Y) at a world XZ position.

```
ctx.terrain.heightAt(worldId, x, z)
```

### host.terrain.normal_at

Reads the terrain surface normal at a world XZ position.

```
ctx.terrain.normalAt(worldId, x, z)
```

### host.terrain.raycast_down

Casts straight down to the terrain surface; returns the hit or null.

```
ctx.terrain.raycastDown(worldId, x, z, fromY)
```

### host.terrain.sample_layer_weights

Reads the per-layer blend weights at a world XZ position.

```
ctx.terrain.sampleLayerWeights(worldId, x, z)
```

### host.terrain.slope_at

Reads the terrain slope in degrees at a world XZ position.

```
ctx.terrain.slopeAt(worldId, x, z)
```

### host.tween.cancel

Stops a running tween by key before it completes; the schedule<->cancel dual of Tween Start.

```
ctx.tween.cancel(key)
```

### host.tween.start

Animates one entity's component field from its current value to a target over a fixed duration, using a deterministic easing curve. Fire-and-forget; runs on the server tick.

```
ctx.tween.start(entityId, spec)
```

### host.ui.close_panel

Requests closing a UI panel. audience scopes who it closes for.

```
ctx.ui.closePanel(panelKey, audience)
```

### host.ui.open_panel

Requests opening a UI panel. audience scopes who sees it: 'room' (default), 'owner', {players:[...]}, or {except:[...]}.

```
ctx.ui.openPanel(panelKey, payload, audience)
```

### host.ui.set_widget_value

Requests a runtime UI widget value update. audience scopes who sees it: 'room' (default), 'owner', {players:[...]}, or {except:[...]}.

```
ctx.ui.setWidgetValue(panelKey, widgetKey, value, audience)
```

### host.warehouse.append

Buffers an atomic append to a warehouse record list field.

```
ctx.warehouse.append(key, recordKey, path, value)
```

### host.warehouse.create

Buffers the creation of a warehouse record.

```
ctx.warehouse.create(key, recordKey, value)
```

### host.warehouse.delete

Buffers the deletion of a warehouse record.

```
ctx.warehouse.delete(key, recordKey)
```

### host.warehouse.get

Reads a prefetched warehouse record.

```
ctx.warehouse.get(key, recordKey)
```

### host.warehouse.increment

Buffers an atomic numeric increment across warehouse record fields.

```
ctx.warehouse.increment(key, recordKey, changes)
```

### host.warehouse.query

Reads a prefetched warehouse query result.

```
ctx.warehouse.query(key, filter, options)
```

### host.warehouse.set

Buffers a create-or-replace of the whole warehouse record value (a safe upsert, not a stale read-modify-write).

```
ctx.warehouse.set(key, recordKey, value)
```

### host.warehouse.transform

Applies field ops to a warehouse record under its row lock, optionally guarded by an expected version.

```
ctx.warehouse.transform(key, recordKey, ops, expect)
```

### host.warehouse.update

Buffers a deprecated last-writer-wins patch of a warehouse record: a blind read-modify-write that is safe under the row lock but loses concurrent writes to the same fields. For counters use Warehouse Increment; for structured edits use Warehouse Set or Warehouse Append.

```
ctx.warehouse.update(key, recordKey, patch)
```

### host.water.is_submerged

Returns whether a point is below the water surface.

```
ctx.water.isSubmerged(worldId, point)
```

### host.water.surface_level_at

Reads the water surface level (world Y) at a world XZ position.

```
ctx.water.surfaceLevelAt(worldId, x, z, atTimeMs)
```

### host.world.despawn

Requests despawn of a same-room entity.

```
ctx.world.despawn(entityId, options)
```

### host.world.entity_has_tag

Reads whether ANOTHER entity carries a first-class tag this tick, returning a boolean. Reach for it to check a target's marker from a room host, such as whether an owner's base is locked before a steal resolves.

```
ctx.world.entityHasTag(entityId, tag)
```

### host.world.find

Finds entities through one canonical filter object.

```
ctx.world.find(filter)
```

### host.world.query

Bounded paged world query: Find Entities' filter algebra plus a keyset cursor. Returns a deterministically ordered page with entities, nextCursor (present while matches remain), and totalMatched.

```
ctx.world.query(options)
```

### host.world.set_entity_owner

Transfers ownership of ANOTHER entity to a Profile, or clears it when the profile id is omitted, as one journaled fact carrying the previous and next owner. Room Script hosts only (I-19). Reach for it to assign a base or resolve a steal from a room host, when the owned thing is not this script's own entity.

```
ctx.world.setEntityOwner(entityId, profileId)
```

### host.world.set_entity_tag

Adds a first-class tag to ANOTHER same-world entity (rate-limited, the same authority World.despawn uses). Reach for it to mark a target from a room host, such as locking an owner's base, when the tag belongs on an entity other than this script's own.

```
ctx.world.setEntityTag(entityId, tag)
```

### host.world.spawn

Requests a dynamic entity spawn.

```
ctx.world.spawn(config)
```

### host.world.spawn_many

Requests up to 64 dynamic entity spawns from one call. Each config drains through the same entity_spawn operation a single Spawn Entity uses, so ids, canonicalization and authority are identical; only the host-call cost is shared.

```
ctx.world.spawnMany(configs)
```

### host.world.spawn_prefab

Spawns a prefab by key at an optional position. First-class atom over the prefab_instantiate drain (ATOM-11).

```
ctx.world.spawnPrefab(prefabKey, position)
```

### host.world.teleport_player

Issues a cross-world player handoff.

```
ctx.world.teleportPlayer(playerId, targetWorldKey, options)
```

## Consumer Input Presentation

This table is generated from the same declaration metadata used by Blueprint cards, the Inspector, validation, and inverse folding. Storage types describe canonical IR; the editor and domain columns describe what an author sees and may choose.

| Node | Input | Consumer label | IR type | Editor | Declared domain | Help |
| --- | --- | --- | --- | --- | --- | --- |
| `core.arithmetic` | `left` | left | `number` | inline literal |  |  |
| `core.arithmetic` | `right` | right | `number` | inline literal |  |  |
| `core.array.first` | `array` | array | `array` | inline literal |  |  |
| `core.array.first` | `defaultValue` | defaultValue | `unknown` | typed literal or connection |  | Fallback when the array is empty. |
| `core.array.for_each` | `array` | array | `array` | inline literal |  |  |
| `core.array.get` | `array` | array | `array` | inline literal |  |  |
| `core.array.get` | `defaultValue` | defaultValue | `unknown` | typed literal or connection |  | Fallback when the index is absent. |
| `core.array.get` | `index` | index | `number` | inline literal |  |  |
| `core.array.length` | `array` | array | `array` | inline literal |  |  |
| `core.array.mutate` | `array` | array | `array` | inline literal |  | Source array. |
| `core.array.mutate` | `index` | index | `number` | inline literal |  | Index (insert / removeAt / set). |
| `core.array.mutate` | `value` | value | `unknown` | typed literal or connection |  | Value (push / insert / set). |
| `core.array.query` | `array` | array | `array` | inline literal |  | Source array. |
| `core.array.query` | `end` | end | `number` | inline literal |  | End index for slice. |
| `core.array.query` | `needle` | needle | `unknown` | typed literal or connection |  | Value to find (contains / indexOf). |
| `core.array.query` | `other` | other | `array` | inline literal |  | Array to concatenate. |
| `core.array.query` | `separator` | separator | `string` | inline literal |  | Separator for join. |
| `core.array.query` | `start` | start | `number` | inline literal |  | Start index for slice. |
| `core.array.reduce` | `array` | array | `array` | inline literal |  | Source array to fold. |
| `core.array.reduce` | `expr` | expr | `unknown` | inline literal |  | Per-item expression producing the next accumulator; reads the item and accumulator via Get. |
| `core.array.reduce` | `seed` | seed | `unknown` | inline literal |  | Initial accumulator value. |
| `core.array.transform` | `array` | array | `array` | inline literal |  | Source array. |
| `core.array.transform` | `expr` | expr | `unknown` | typed literal or connection |  | Per-item expression (map value / filter+find+some+every predicate / sortBy key); reads the item via Get. |
| `core.bitwise` | `a` | a | `number` | inline literal |  | First operand (the sole operand for not). |
| `core.bitwise` | `b` | b | `number` | inline literal |  | Second operand (shift count for shl/shr/ushr; unused by not). |
| `core.boolean` | `left` | left | `boolean` | inline literal |  |  |
| `core.boolean` | `right` | right | `boolean` | inline literal |  |  |
| `core.bounded.for` | `from` | from | `number` | inline literal |  |  |
| `core.bounded.for` | `step` | step | `number` | inline literal |  |  |
| `core.bounded.for` | `to` | to | `number` | inline literal |  |  |
| `core.bounded.while` | `test` | test | `boolean` | inline literal |  |  |
| `core.comparison` | `left` | left | `unknown` | typed literal or connection |  |  |
| `core.comparison` | `right` | right | `unknown` | typed literal or connection |  |  |
| `core.component.patch` | `entity` | entity | `entity` | inline literal; entity reference (key) |  | Optional target entity. |
| `core.component.patch` | `patch` | patch | `object` | inline literal |  |  |
| `core.component.read` | `entity` | entity | `entity` | inline literal; entity reference (key) |  | Optional target entity. |
| `core.entity.id` | `entity` | entity | `entity` | inline literal; entity reference (key) |  | Optional entity. With no input, uses the entity running this script. |
| `core.event.payload.get` | `defaultValue` | defaultValue | `unknown` | typed literal or connection |  | Fallback when the payload path is absent. |
| `core.flow.do_n` | `n` | n | `number` | inline literal |  | How many times to allow. |
| `core.flow.do_n` | `reset` | reset | `boolean` | inline literal |  | Re-arm the counter when true. |
| `core.flow.do_once` | `reset` | reset | `boolean` | inline literal |  | Re-arm the gate when true. |
| `core.flow.timer.after` | `key` | key | `string` | inline literal |  | Optional timer key to disambiguate concurrent timers. |
| `core.flow.timer.after` | `seconds` | seconds | `number` | inline literal |  | Delay in seconds (rounded up to whole ticks). |
| `core.flow.timer.cancel` | `key` | key | `string` | inline literal |  | Timer key matching the one the Timer After scheduled. |
| `core.host.call` | `args` | args | `array` | inline literal |  | Host arguments. |
| `core.if` | `test` | test | `boolean` | inline literal |  |  |
| `core.let` | `value` | value | `unknown` | typed literal or connection |  |  |
| `core.map` | `defaultValue` | defaultValue | `unknown` | typed literal or connection |  | Value returned by get when the key is absent (optional). |
| `core.map` | `key` | key | `string` | inline literal |  | Key (add / remove / contains / get). |
| `core.map` | `map` | map | `map` | inline literal |  | Source map. |
| `core.map` | `other` | other | `map` | inline literal |  | Map to merge in (merge; right/other wins on key collision). |
| `core.map` | `value` | value | `unknown` | typed literal or connection |  | Value (add). |
| `core.math.remap` | `inMax` | inMax | `number` | inline literal |  | High end of the input range. |
| `core.math.remap` | `inMin` | inMin | `number` | inline literal |  | Low end of the input range. |
| `core.math.remap` | `outMax` | outMax | `number` | inline literal |  | High end of the output range. |
| `core.math.remap` | `outMin` | outMin | `number` | inline literal |  | Low end of the output range. |
| `core.math.remap` | `value` | value | `number` | inline literal |  | The value to re-scale. |
| `core.math` | `a` | a | `number` | inline literal |  | First operand (edge0 for smoothstep). |
| `core.math` | `b` | b | `number` | inline literal |  | Second operand (binary ops / clamp min / lerp end / smoothstep edge1 / imul32 multiplicand). |
| `core.math` | `c` | c | `number` | inline literal |  | Third operand (clamp max / lerp factor / smoothstep x). |
| `core.not` | `value` | value | `boolean` | inline literal |  |  |
| `core.object` | `key` | key | `string` | inline literal |  | Field name for set / has / delete. |
| `core.object` | `source` | source | `object` | inline literal |  | Object to merge in. |
| `core.object` | `target` | target | `object` | inline literal |  | Object to read or update. |
| `core.object` | `value` | value | `unknown` | typed literal or connection |  | Field value for set. |
| `core.quat` | `a` | a | `quaternion` | inline literal |  | Primary quaternion (the rotation to apply for rotateVector). |
| `core.quat` | `b` | b | `quaternion` | inline literal |  | Second quaternion (multiply / slerp). |
| `core.quat` | `euler` | euler | `vector3` | inline literal |  | Euler angles for fromEuler. |
| `core.quat` | `forward` | forward | `vector3` | inline literal |  | Forward direction for lookAt. |
| `core.quat` | `t` | t | `number` | inline literal |  | Slerp factor 0..1. |
| `core.quat` | `up` | up | `vector3` | inline literal |  | Up direction for lookAt. |
| `core.quat` | `vec` | vec | `vector3` | inline literal |  | Direction rotated by the quaternion (rotateVector). |
| `core.quat` | `w` | w | `number` | inline literal |  | W for make. |
| `core.quat` | `x` | x | `number` | inline literal |  | X for make. |
| `core.quat` | `y` | y | `number` | inline literal |  | Y for make. |
| `core.quat` | `z` | z | `number` | inline literal |  | Z for make. |
| `core.record.get` | `defaultValue` | defaultValue | `unknown` | typed literal or connection |  | Fallback when the record path is absent. |
| `core.record.get` | `record` | record | `object` | inline literal |  |  |
| `core.select` | `condition` | condition | `boolean` | inline literal |  | Selector. |
| `core.select` | `ifFalse` | ifFalse | `unknown` | inline literal |  | Value when condition is false. |
| `core.select` | `ifTrue` | ifTrue | `unknown` | inline literal |  | Value when condition is true. |
| `core.set` | `value` | value | `unknown` | typed literal or connection |  |  |
| `core.string` | `a` | a | `string` | inline literal |  | Primary string (or template for format). |
| `core.string` | `b` | b | `string` | inline literal |  | Second string (concat / contains / split / replace search / startsWith / endsWith / indexOf). |
| `core.string` | `c` | c | `string` | inline literal |  | Replacement string (replace). |
| `core.string` | `end` | end | `number` | inline literal |  | End index (substring; optional). |
| `core.string` | `slots` | slots | `object` | inline literal |  | Named substitution slots for format ({name} -> value). |
| `core.string` | `start` | start | `number` | inline literal |  | Start index (substring). |
| `core.switch` | `on` | on | `unknown` | typed literal or connection |  | Value to switch on. |
| `core.value.array` | `items` | items | `array` | inline literal |  |  |
| `core.value.assert` | `value` | value | `unknown` | typed literal or connection |  |  |
| `core.value.cast` | `value` | value | `unknown` | typed literal or connection |  |  |
| `core.value.coerce` | `defaultValue` | defaultValue | `unknown` | typed literal or connection |  | Fallback when coercion cannot produce a finite value. |
| `core.value.coerce` | `value` | value | `unknown` | typed literal or connection |  |  |
| `core.value.object` | `entries` | entries | `object` | inline literal |  |  |
| `core.vec3` | `left` | left | `vector3` | inline literal |  | Primary vector (incident for reflect; current for moveTowards; the vector to project/measure/clamp). |
| `core.vec3` | `right` | right | `vector3` | inline literal |  | Second vector for binary ops (normal for reflect; target for moveTowards; the vector to project onto / measure the angle to). |
| `core.vec3` | `scalar` | scalar | `number` | inline literal |  | Scale factor (max step distance for moveTowards; max length for clampLength). |
| `core.vec3` | `t` | t | `number` | inline literal |  | Interpolation factor 0..1. |
| `core.vec3` | `x` | x | `number` | inline literal |  | X component for make. |
| `core.vec3` | `y` | y | `number` | inline literal |  | Y component for make. |
| `core.vec3` | `z` | z | `number` | inline literal |  | Z component for make. |
| `host.audio.play_spatial` | `assetId` | assetId | `string` | inline literal |  |  |
| `host.audio.play_spatial` | `options` | options | `object` | inline literal |  |  |
| `host.audio.play_spatial` | `position` | position | `vector3` | inline literal |  |  |
| `host.audio.play` | `assetId` | assetId | `string` | inline literal |  |  |
| `host.audio.play` | `options` | options | `object` | inline literal |  |  |
| `host.audio.set_background_music` | `assetId` | assetId | `string` | inline literal |  |  |
| `host.audio.set_background_music` | `options` | options | `object` | inline literal |  |  |
| `host.audio.set_volume` | `handle` | handle | `audio_handle` | inline literal |  |  |
| `host.audio.set_volume` | `volume` | volume | `number` | inline literal |  |  |
| `host.audio.stop` | `handle` | handle | `audio_handle` | inline literal |  |  |
| `host.camera.add_look_input` | `delta` | delta | `vector3` | inline literal |  | Look delta: x = yaw degrees, y = pitch degrees. |
| `host.camera.set_look_sensitivity` | `degreesPerUnit` | degreesPerUnit | `number` | inline literal |  | Look sensitivity in degrees per input unit. |
| `host.camera.set_pitch_clamp` | `maxDeg` | maxDeg | `number` | inline literal |  | Maximum pitch in degrees. |
| `host.camera.set_pitch_clamp` | `minDeg` | minDeg | `number` | inline literal |  | Minimum pitch in degrees. |
| `host.camera.set_view_target` | `offset` | offset | `vector3` | inline literal |  | Optional world-space offset from the target. |
| `host.camera.set_view_target` | `target` | target | `entity` | inline literal; entity reference (key) |  | Entity to look at. |
| `host.commerce.owns` | `entitlementKey` | entitlementKey | `string` | inline literal |  | Entitlement key granted by an offer. |
| `host.commerce.owns` | `playerSessionId` | playerSessionId | `string` | inline literal |  | Seat to check; defaults to the seat possessing this entity. |
| `host.commerce.prompt_purchase` | `audience` | audience | `json` | inline literal |  | Seats to prompt: "owner" (default, the seat possessing this entity), { players: [...] } or { except: [...] }. Never "room". |
| `host.commerce.prompt_purchase` | `offerKey` | offerKey | `string` | inline literal |  | Key of a published offer of this game. |
| `host.debug.log` | `level` | level | `string` | inline literal |  | One of debug, info, warn, error. Defaults to info. |
| `host.debug.log` | `message` | message | `string` | inline literal |  |  |
| `host.debug.log` | `metadata` | metadata | `object` | inline literal |  |  |
| `host.entity.add_component` | `componentType` | componentType | `string` | inline literal |  |  |
| `host.entity.add_component` | `data` | data | `object` | inline literal |  |  |
| `host.entity.descendants` | `options` | options | `object` | inline literal |  |  |
| `host.entity.detach` | `options` | options | `object` | inline literal |  |  |
| `host.entity.has_tag` | `tag` | tag | `string` | inline literal |  |  |
| `host.entity.patch_component` | `componentType` | componentType | `string` | inline literal |  |  |
| `host.entity.patch_component` | `patch` | patch | `object` | inline literal |  |  |
| `host.entity.read_component` | `componentTypeOrKey` | componentTypeOrKey | `string` | inline literal |  |  |
| `host.entity.remove_component` | `componentTypeOrKey` | componentTypeOrKey | `string` | inline literal |  |  |
| `host.entity.remove_tag` | `tag` | tag | `string` | inline literal |  |  |
| `host.entity.replace_component` | `componentType` | componentType | `string` | inline literal |  |  |
| `host.entity.replace_component` | `data` | data | `object` | inline literal |  |  |
| `host.entity.set_name` | `name` | name | `string` | inline literal |  |  |
| `host.entity.set_owner` | `entityId` | entityId | `string` | inline literal |  |  |
| `host.entity.set_owner` | `profileId` | profileId | `string` | inline literal |  |  |
| `host.entity.set_parent` | `options` | options | `object` | inline literal |  |  |
| `host.entity.set_parent` | `parentId` | parentId | `string` | inline literal |  |  |
| `host.entity.set_tag` | `tag` | tag | `string` | inline literal |  |  |
| `host.events.emit` | `eventKey` | eventKey | `string` | inline literal |  |  |
| `host.events.emit` | `payload` | payload | `object` | inline literal |  |  |
| `host.events.emit` | `targetEntityId` | targetEntityId | `entity` | inline literal; entity reference (key) |  | Optional target entity (id or key): only that entity's listeners receive the event. Omit to broadcast to the room. |
| `host.fx.decal` | `options` | options | `object` | inline literal |  | Decal options: the bounded Decal subset, placement { at, rotation?, attachEntityId? }, ttlTicks, and audience. |
| `host.fx.particle_burst` | `options` | options | `object` | inline literal |  | Burst options: the bounded ParticleEmitter subset, placement { at, rotation?, attachEntityId? }, ttlTicks, and audience. |
| `host.inventory.grant` | `itemKey` | itemKey | `string` | inline literal |  | Item key declared by the game's economy. |
| `host.inventory.grant` | `playerSessionId` | playerSessionId | `string` | inline literal |  | Seat whose inventory receives the item. |
| `host.inventory.grant` | `quantity` | quantity | `number` | inline literal |  | Strictly positive integer quantity. |
| `host.inventory.grant` | `reason` | reason | `string` | inline literal |  |  |
| `host.match.add_score` | `amount` | amount | `number` | inline literal |  | Signed score delta to add. |
| `host.match.add_score` | `reason` | reason | `string` | inline literal |  |  |
| `host.match.add_score` | `scoreboardKey` | scoreboardKey | `string` | inline literal |  | Scoreboard key; defaults to the blueprint's only scoreboard. |
| `host.match.add_score` | `subjectKey` | subjectKey | `string` | inline literal |  | Team key or player key credited with the score. |
| `host.match.get_score` | `scoreboardKey` | scoreboardKey | `string` | inline literal |  | Scoreboard key; defaults to the snapshot's only scoreboard. |
| `host.match.get_score` | `subjectKey` | subjectKey | `string` | inline literal |  | Team key or player key to read. |
| `host.match.patch_objective` | `objectiveKey` | objectiveKey | `string` | inline literal |  | Objective key declared by the multiplayer blueprint. |
| `host.match.patch_objective` | `patch` | patch | `object` | inline literal |  | Partial objective state merged by the authoritative drain. |
| `host.match.patch_objective` | `reason` | reason | `string` | inline literal |  |  |
| `host.match.set_phase` | `metadata` | metadata | `object` | inline literal |  |  |
| `host.match.set_phase` | `phaseKey` | phaseKey | `string` | inline literal |  |  |
| `host.match.set_phase` | `reason` | reason | `string` | inline literal |  |  |
| `host.navigation.find_path` | `agentProfileKey` | agentProfileKey | `string` | inline literal |  |  |
| `host.navigation.find_path` | `from` | from | `vector3` | inline literal |  |  |
| `host.navigation.find_path` | `to` | to | `vector3` | inline literal |  |  |
| `host.navigation.find_path` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.navigation.is_reachable` | `agentProfileKey` | agentProfileKey | `string` | inline literal |  |  |
| `host.navigation.is_reachable` | `from` | from | `vector3` | inline literal |  |  |
| `host.navigation.is_reachable` | `to` | to | `vector3` | inline literal |  |  |
| `host.navigation.is_reachable` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.navigation.nearest_point` | `agentProfileKey` | agentProfileKey | `string` | inline literal |  |  |
| `host.navigation.nearest_point` | `point` | point | `vector3` | inline literal |  |  |
| `host.navigation.nearest_point` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.navigation.raycast` | `agentProfileKey` | agentProfileKey | `string` | inline literal |  |  |
| `host.navigation.raycast` | `from` | from | `vector3` | inline literal |  |  |
| `host.navigation.raycast` | `to` | to | `vector3` | inline literal |  |  |
| `host.navigation.raycast` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.navigation.steer_toward` | `agentProfileKey` | agentProfileKey | `string` | inline literal |  |  |
| `host.navigation.steer_toward` | `from` | from | `vector3` | inline literal |  |  |
| `host.navigation.steer_toward` | `maxStep` | maxStep | `number` | inline literal |  |  |
| `host.navigation.steer_toward` | `to` | to | `vector3` | inline literal |  |  |
| `host.navigation.steer_toward` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.network.send_message` | `channel` | channel | `string` | inline literal |  |  |
| `host.network.send_message` | `payload` | payload | `object` | inline literal |  |  |
| `host.network.send_message` | `playerId` | playerId | `string` | inline literal |  | Player session id for a private send; omit to broadcast. |
| `host.physics.command` | `bodyCommand` | Command | `object` | inline literal; declared choice | `Apply Force [Force: vector3, At Point: vector3?]`, `Apply Impulse [Impulse: vector3, At Point: vector3?]`, `Launch Entity [Velocity: vector3]`, `Apply Torque [Torque: vector3]`, `Apply Torque Impulse [Torque Impulse: vector3]`, `Teleport Body [Position: vector3, Rotation: vector3?, Velocity: vector3?, Angular Velocity: vector3?, Wake Body: boolean?]`, `Reset Body [Position: vector3?, Rotation: vector3?, Velocity: vector3?, Angular Velocity: vector3?, Wake Body: boolean?]` | Physics operation and the fields required by that operation. |
| `host.physics.command` | `entityId` | Target | `entity` | inline literal; entity reference (key) |  | Entity whose physics body should change. |
| `host.physics.occupancy_query` | `cellKey` | cellKey | `string` | inline literal |  |  |
| `host.physics.occupancy_query` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.physics.overlap_test` | `filter` | filter | `object` | inline literal |  |  |
| `host.physics.overlap_test` | `shape` | shape | `object` | inline literal |  |  |
| `host.physics.overlap_test` | `transform` | transform | `object` | inline literal |  |  |
| `host.physics.raycast` | `direction` | direction | `vector3` | inline literal |  |  |
| `host.physics.raycast` | `distance` | distance | `number` | inline literal |  |  |
| `host.physics.raycast` | `filter` | filter | `object` | inline literal |  |  |
| `host.physics.raycast` | `origin` | origin | `vector3` | inline literal |  |  |
| `host.physics.shapecast` | `direction` | direction | `vector3` | inline literal |  |  |
| `host.physics.shapecast` | `distance` | distance | `number` | inline literal |  |  |
| `host.physics.shapecast` | `filter` | filter | `object` | inline literal |  |  |
| `host.physics.shapecast` | `shape` | shape | `object` | inline literal |  |  |
| `host.physics.shapecast` | `transform` | transform | `object` | inline literal |  |  |
| `host.platform.request_fullscreen` | `target` | target | `string` | inline literal |  |  |
| `host.player.eliminate` | `playerSessionId` | playerSessionId | `string` | inline literal |  |  |
| `host.player.eliminate` | `reason` | reason | `string` | inline literal |  |  |
| `host.player.possess` | `entityId` | entityId | `string` | inline literal |  |  |
| `host.player.possess` | `playerSessionId` | playerSessionId | `string` | inline literal |  |  |
| `host.player.release` | `playerSessionId` | playerSessionId | `string` | inline literal |  |  |
| `host.player.release` | `reason` | reason | `string` | inline literal |  |  |
| `host.player.spawn_character` | `options` | options | `object` | inline literal |  |  |
| `host.player.spawn_character` | `playerSessionId` | playerSessionId | `string` | inline literal |  |  |
| `host.players.get` | `playerSessionId` | playerSessionId | `string` | inline literal |  |  |
| `host.program.param` | `index` | index | `number` | inline literal |  | Exposed-field index (0-based, server-ordered). |
| `host.random.bool` | `p` | p | `number` | inline literal |  |  |
| `host.random.bool` | `stream` | stream | `random_stream` | inline literal |  |  |
| `host.random.gaussian` | `mean` | mean | `number` | inline literal |  |  |
| `host.random.gaussian` | `std` | std | `number` | inline literal |  |  |
| `host.random.gaussian` | `stream` | stream | `random_stream` | inline literal |  |  |
| `host.random.int` | `max` | max | `number` | inline literal |  |  |
| `host.random.int` | `min` | min | `number` | inline literal |  |  |
| `host.random.int` | `stream` | stream | `random_stream` | inline literal |  |  |
| `host.random.pick` | `array` | array | `array` | inline literal |  |  |
| `host.random.pick` | `stream` | stream | `random_stream` | inline literal |  |  |
| `host.random.point_in_circle` | `radius` | radius | `number` | inline literal |  |  |
| `host.random.point_in_circle` | `stream` | stream | `random_stream` | inline literal |  |  |
| `host.random.point_in_sphere` | `radius` | radius | `number` | inline literal |  |  |
| `host.random.point_in_sphere` | `stream` | stream | `random_stream` | inline literal |  |  |
| `host.random.range` | `max` | max | `number` | inline literal |  |  |
| `host.random.range` | `min` | min | `number` | inline literal |  |  |
| `host.random.range` | `stream` | stream | `random_stream` | inline literal |  |  |
| `host.random.seeded` | `seed` | seed | `string` | inline literal |  |  |
| `host.random.shuffle` | `array` | array | `array` | inline literal |  |  |
| `host.random.shuffle` | `stream` | stream | `random_stream` | inline literal |  |  |
| `host.random.sign` | `stream` | stream | `random_stream` | inline literal |  |  |
| `host.random.unit_vector` | `stream` | stream | `random_stream` | inline literal |  |  |
| `host.random.weighted_pick` | `items` | items | `array` | inline literal |  |  |
| `host.random.weighted_pick` | `stream` | stream | `random_stream` | inline literal |  |  |
| `host.random.weighted_pick` | `weights` | weights | `array` | inline literal |  |  |
| `host.terrain.height_at` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.terrain.height_at` | `x` | x | `number` | inline literal |  |  |
| `host.terrain.height_at` | `z` | z | `number` | inline literal |  |  |
| `host.terrain.normal_at` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.terrain.normal_at` | `x` | x | `number` | inline literal |  |  |
| `host.terrain.normal_at` | `z` | z | `number` | inline literal |  |  |
| `host.terrain.raycast_down` | `fromY` | fromY | `number` | inline literal |  |  |
| `host.terrain.raycast_down` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.terrain.raycast_down` | `x` | x | `number` | inline literal |  |  |
| `host.terrain.raycast_down` | `z` | z | `number` | inline literal |  |  |
| `host.terrain.sample_layer_weights` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.terrain.sample_layer_weights` | `x` | x | `number` | inline literal |  |  |
| `host.terrain.sample_layer_weights` | `z` | z | `number` | inline literal |  |  |
| `host.terrain.slope_at` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.terrain.slope_at` | `x` | x | `number` | inline literal |  |  |
| `host.terrain.slope_at` | `z` | z | `number` | inline literal |  |  |
| `host.tween.cancel` | `key` | key | `string` | inline literal |  | Tween key matching the one Tween Start used. |
| `host.tween.start` | `entityId` | Target | `entity` | inline literal; entity reference (key) |  | Entity whose component field to animate. |
| `host.tween.start` | `spec` | spec | `object` | inline literal |  | Tween spec: { component, field, to (number or vector3), durationSeconds, easing? (linear\|quadIn\|quadOut\|quadInOut\|cubicIn\|cubicOut\|cubicInOut\|sineIn\|sineOut\|sineInOut\|smoothstep), key?, from?, angle? }. |
| `host.ui.close_panel` | `audience` | audience | `unknown` | typed literal or connection |  | Who this write reaches: 'room' (default), 'owner', {players:[...]}, or {except:[...]}. An audienced write gets its own per-player record, so two players' HUDs never collide. |
| `host.ui.close_panel` | `panelKey` | panelKey | `string` | inline literal |  |  |
| `host.ui.open_panel` | `audience` | audience | `unknown` | typed literal or connection |  | Who this write reaches: 'room' (default), 'owner', {players:[...]}, or {except:[...]}. An audienced write gets its own per-player record, so two players' HUDs never collide. |
| `host.ui.open_panel` | `panelKey` | panelKey | `string` | inline literal |  |  |
| `host.ui.open_panel` | `payload` | payload | `object` | inline literal |  |  |
| `host.ui.set_widget_value` | `audience` | audience | `unknown` | typed literal or connection |  | Who this write reaches: 'room' (default), 'owner', {players:[...]}, or {except:[...]}. An audienced write gets its own per-player record, so two players' HUDs never collide. |
| `host.ui.set_widget_value` | `panelKey` | panelKey | `string` | inline literal |  |  |
| `host.ui.set_widget_value` | `value` | value | `unknown` | typed literal or connection |  |  |
| `host.ui.set_widget_value` | `widgetKey` | widgetKey | `string` | inline literal |  |  |
| `host.warehouse.append` | `key` | key | `string` | inline literal |  |  |
| `host.warehouse.append` | `path` | path | `string` | inline literal |  |  |
| `host.warehouse.append` | `recordKey` | recordKey | `string` | inline literal |  |  |
| `host.warehouse.append` | `value` | value | `object` | inline literal |  |  |
| `host.warehouse.create` | `key` | key | `string` | inline literal |  |  |
| `host.warehouse.create` | `recordKey` | recordKey | `string` | inline literal |  |  |
| `host.warehouse.create` | `value` | value | `object` | inline literal |  |  |
| `host.warehouse.delete` | `key` | key | `string` | inline literal |  |  |
| `host.warehouse.delete` | `recordKey` | recordKey | `string` | inline literal |  |  |
| `host.warehouse.get` | `key` | key | `string` | inline literal |  |  |
| `host.warehouse.get` | `recordKey` | recordKey | `string` | inline literal |  |  |
| `host.warehouse.increment` | `changes` | changes | `object` | inline literal |  |  |
| `host.warehouse.increment` | `key` | key | `string` | inline literal |  |  |
| `host.warehouse.increment` | `recordKey` | recordKey | `string` | inline literal |  |  |
| `host.warehouse.query` | `filter` | filter | `object` | inline literal |  |  |
| `host.warehouse.query` | `key` | key | `string` | inline literal |  |  |
| `host.warehouse.query` | `options` | options | `object` | inline literal |  |  |
| `host.warehouse.set` | `key` | key | `string` | inline literal |  |  |
| `host.warehouse.set` | `recordKey` | recordKey | `string` | inline literal |  |  |
| `host.warehouse.set` | `value` | value | `object` | inline literal |  |  |
| `host.warehouse.transform` | `expect` | expect | `object` | inline literal |  |  |
| `host.warehouse.transform` | `key` | key | `string` | inline literal |  |  |
| `host.warehouse.transform` | `ops` | ops | `object` | inline literal |  |  |
| `host.warehouse.transform` | `recordKey` | recordKey | `string` | inline literal |  |  |
| `host.warehouse.update` | `key` | key | `string` | inline literal |  |  |
| `host.warehouse.update` | `patch` | patch | `object` | inline literal |  |  |
| `host.warehouse.update` | `recordKey` | recordKey | `string` | inline literal |  |  |
| `host.water.is_submerged` | `point` | point | `vector3` | inline literal |  |  |
| `host.water.is_submerged` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.water.surface_level_at` | `atTimeMs` | atTimeMs | `number` | inline literal |  |  |
| `host.water.surface_level_at` | `worldId` | worldId | `string` | inline literal |  |  |
| `host.water.surface_level_at` | `x` | x | `number` | inline literal |  |  |
| `host.water.surface_level_at` | `z` | z | `number` | inline literal |  |  |
| `host.world.despawn` | `entityId` | entityId | `string` | inline literal |  |  |
| `host.world.despawn` | `options` | options | `object` | inline literal |  |  |
| `host.world.entity_has_tag` | `entityId` | entityId | `string` | inline literal |  |  |
| `host.world.entity_has_tag` | `tag` | tag | `string` | inline literal |  |  |
| `host.world.find` | `filter` | filter | `object` | inline literal |  |  |
| `host.world.query` | `options` | options | `object` | inline literal |  |  |
| `host.world.set_entity_owner` | `entityId` | entityId | `string` | inline literal |  |  |
| `host.world.set_entity_owner` | `profileId` | profileId | `string` | inline literal |  |  |
| `host.world.set_entity_tag` | `entityId` | entityId | `string` | inline literal |  |  |
| `host.world.set_entity_tag` | `tag` | tag | `string` | inline literal |  |  |
| `host.world.spawn_many` | `configs` | configs | `array` | inline literal |  |  |
| `host.world.spawn_prefab` | `position` | position | `vector3` | inline literal |  |  |
| `host.world.spawn_prefab` | `prefabKey` | prefabKey | `string` | inline literal |  |  |
| `host.world.spawn` | `config` | config | `object` | inline literal |  |  |
| `host.world.teleport_player` | `options` | options | `object` | inline literal |  |  |
| `host.world.teleport_player` | `playerId` | playerId | `string` | inline literal |  |  |
| `host.world.teleport_player` | `targetWorldKey` | targetWorldKey | `string` | inline literal |  |  |

## Validation

Run `npm run gen-docs:check` to validate this generated snapshot against the live catalog. Runtime/codegen parity remains guarded by the script-system reconciliation and Blueprint IR tests.

## Declaration Stability Policy

Script IR node declarations are locked by declaration identity, not by hand-maintained counts. Node ids, handler events, IR op names, host namespace/name pairs, port names, port types, SDK expression paths, risk metadata, and declared semantics are stable once shipped.

Breaking changes require an additive replacement declaration and an explicit validation decision. Capability contexts may expose only a subset of current nodes; emitted IR outside that context is rejected before projection or runtime execution.

## Consumers

- Runtime host registry derives `scriptHostFunctions` from the declarations.
- Validator, TypeScript generator, TypeScript parser, generated SDK declarations, AI resolvers, frontend catalog exports, visual scripting, pattern library, and Engine Contract Packet all consume this catalog.
- Manual TypeScript SDK method signatures remain richer than raw node ports, but host identity, SDK path, permissions, risk, and host-function union are declaration-derived.
