@neocompose/cli 0.48.3 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.48.3",
3
+ "version": "0.50.0",
4
4
  "description": "Neo Compose native project-source CLI with bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -9,7 +9,7 @@ description: >-
9
9
  `@neocompose/cli` or `node cli/bin/neo.mjs` in the neo-compose repository.
10
10
  ---
11
11
 
12
- <!-- reviewed-through-cli: 0.48.3 -->
12
+ <!-- reviewed-through-cli: 0.50.0 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -24,6 +24,29 @@ For world layer links, derive a concrete project class from
24
24
  `targetLayer` relation. Do not add value-level target metadata or ask painting
25
25
  operations to create/repair relation targets.
26
26
 
27
+ ## Tile placements
28
+
29
+ Use `@tile(VoidTile)` on a `NeoTileInstance` construction to select its tile
30
+ class. The named spelling `@tile(asset: VoidTile)` is equivalent; the asset is
31
+ required and only the argument label is optional.
32
+
33
+ ```neo
34
+ @tile(VoidTile)
35
+ new NeoTileInstance() {
36
+ Cell = new(9, -4)
37
+ }
38
+ ```
39
+
40
+ Pull emits the positional spelling. The annotation writes the placement's
41
+ `assetClassId` metadata and does not construct a tile value or add a generic
42
+ argument. The asset must be a concrete, non-generic descendant of `NeoTile`.
43
+ Use the annotation on persisted literal constructions; executable NeoScript
44
+ and evaluated placement constructors reject it.
45
+ The grid's imports and the tile's compatible-layer relations still constrain
46
+ where the placement can be used. Existing placement overrides remain attached
47
+ when the selected asset is unchanged; recreate a placement to change its asset
48
+ when it has overrides or a variant.
49
+
27
50
  ## Object variants
28
51
 
29
52
  A variant is a named configuration of one `NeoObject`-derived class: how to
@@ -88,7 +88,7 @@ wrappers.
88
88
  The marker near the top of `SKILL.md` must exactly match the package version:
89
89
 
90
90
  ```html
91
- <!-- reviewed-through-cli: 0.48.3 -->
91
+ <!-- reviewed-through-cli: 0.50.0 -->
92
92
  ```
93
93
 
94
94
  The quoted version above is checked too, so this instruction cannot go stale
@@ -136,11 +136,14 @@ member creates a sparse override with its deterministic projected ID; removing
136
136
  that member from an existing initializer resets the override and resumes source
137
137
  tracking. Require either transition to appear in `neo diff`.
138
138
 
139
- A concrete generic argument can carry a default that its type spelling does
140
- not show. Pull writes nonlocalized scalar and empty aggregate binding defaults at implicit
141
- construction sites, for example `DefaultData = new()`. Keeping that expression
142
- unchanged or omitting it retains the virtual default; editing it creates an
143
- override. A default that selects a subtype keeps the explicit subtype name.
139
+ Generic arguments specify types, not default values. A required generic member
140
+ must be supplied at construction unless its member declaration or an inherited
141
+ member declaration supplies a default. Missing required members are compile
142
+ errors. Pull preserves incomplete stored objects for repair; add the missing
143
+ initializer or declare the intended member default before testing or pushing.
144
+ An override without a local initializer inherits an available base member
145
+ default, including when its stored `defaultValue` carrier is null. An explicit
146
+ `= null` initializer is a literal nullable default, not an inheritance marker.
144
147
 
145
148
  Editing an initializer updates sparse override rows in place: projected member
146
149
  IDs remain stable, and omitted virtual rows are never emitted as authored seed