Spawn picks its asset in a setting, so nothing can feed it: no variable, no list, no edge. The kind asset existed only for settings.
asset becomes a full kind like Animation or Sound: variable, list item ({"$asset": id}), declared port, and an Asset literal node. Declared by a user it offers every placeable asset.
Spawn and Is asset get an asset input with the picker inline. The key stays asset, so a pick saved before reads as the inline value and old projects keep spawning.
2. Node "Child by name"
Like Object by name, but only below a given object: its children, their children and so on. The nearest level wins (a child before a grandchild), within a level the first in hierarchy order. null when nothing is called so, or no object is given.
Asked in chat (2026-09-26, project `cbbf160bb7e8`).
## 1. An asset as a value
`Spawn` picks its asset in a setting, so nothing can feed it: no variable, no list, no edge. The kind `asset` existed only for settings.
- `asset` becomes a full kind like Animation or Sound: variable, list item (`{"$asset": id}`), declared port, and an **Asset** literal node. Declared by a user it offers every placeable asset.
- `Spawn` and `Is asset` get an `asset` input with the picker inline. The key stays `asset`, so a pick saved before reads as the inline value and old projects keep spawning.
## 2. Node "Child by name"
Like `Object by name`, but only below a given object: its children, their children and so on. The nearest level wins (a child before a grandchild), within a level the first in hierarchy order. `null` when nothing is called so, or no object is given.
"Asset" is now a value kind like Animation or Sound: a port type, a variable kind, a list item, and a new literal node Asset.
Spawn has an input asset. Unconnected you pick the asset on the node, connected it comes over the edge.
Is asset got the same input.
Old projects load unchanged: the input uses the key of the old setting, so a stored asset now shows as the input value.
Child by name
Inputs object and name, output child.
Searches every level below the object, breadth first: a child wins over a grandchild of the same name, and inside one level the hierarchy order decides. No match or no object gives (null).
Tests
./check.sh: 168 files, 2453 tests, CHECK EXIT 0
9 unit tests in tests/core/asset-kind.test.ts plus catalog cases for Spawn, Is asset, Child by name and the literal.
e2e 6z-ii (2 checks): node rows and a real drag of the literal onto asset. e2e 3 and 9 (Spawn with the old stored format) green in the same run.
3 counter-probes (depth-first search, Spawn reading only the old setting, runtime ignoring the parent) each fail their test.
Follow-up in 98211a8: a variable of kind Object can now hold the spawned instance across behavior runs.
Done in `923baf2` (wiki `699b72d`).
**Asset as a kind**
- "Asset" is now a value kind like Animation or Sound: a port type, a variable kind, a list item, and a new literal node **Asset**.
- **Spawn** has an input `asset`. Unconnected you pick the asset on the node, connected it comes over the edge.
- **Is asset** got the same input.
- Old projects load unchanged: the input uses the key of the old setting, so a stored asset now shows as the input value.
**Child by name**
- Inputs `object` and `name`, output `child`.
- Searches every level below the object, breadth first: a child wins over a grandchild of the same name, and inside one level the hierarchy order decides. No match or no object gives `(null)`.
**Tests**
- `./check.sh`: 168 files, 2453 tests, CHECK EXIT 0
- 9 unit tests in `tests/core/asset-kind.test.ts` plus catalog cases for Spawn, Is asset, Child by name and the literal.
- e2e 6z-ii (2 checks): node rows and a real drag of the literal onto `asset`. e2e 3 and 9 (Spawn with the old stored format) green in the same run.
- 3 counter-probes (depth-first search, Spawn reading only the old setting, runtime ignoring the parent) each fail their test.
Follow-up in `98211a8`: a variable of kind Object can now hold the spawned instance across behavior runs.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Asked in chat (2026-09-26, project
cbbf160bb7e8).1. An asset as a value
Spawnpicks its asset in a setting, so nothing can feed it: no variable, no list, no edge. The kindassetexisted only for settings.assetbecomes a full kind like Animation or Sound: variable, list item ({"$asset": id}), declared port, and an Asset literal node. Declared by a user it offers every placeable asset.SpawnandIs assetget anassetinput with the picker inline. The key staysasset, so a pick saved before reads as the inline value and old projects keep spawning.2. Node "Child by name"
Like
Object by name, but only below a given object: its children, their children and so on. The nearest level wins (a child before a grandchild), within a level the first in hierarchy order.nullwhen nothing is called so, or no object is given.Done in
923baf2(wiki699b72d).Asset as a kind
asset. Unconnected you pick the asset on the node, connected it comes over the edge.Child by name
objectandname, outputchild.(null).Tests
./check.sh: 168 files, 2453 tests, CHECK EXIT 0tests/core/asset-kind.test.tsplus catalog cases for Spawn, Is asset, Child by name and the literal.asset. e2e 3 and 9 (Spawn with the old stored format) green in the same run.Follow-up in
98211a8: a variable of kind Object can now hold the spawned instance across behavior runs.