@neocompose/cli 0.80.0 → 0.81.1

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.80.0",
3
+ "version": "0.81.1",
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.80.0 -->
12
+ <!-- reviewed-through-cli: 0.81.1 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -95,7 +95,12 @@ Object `PlacementTiles` is a `List<NeoPlacementTile>`. Each entry marks a
95
95
  footprint cell with its own `Cell` member. It is independent of `NeoTile`. Rendered
96
96
  tile classes do not belong in this list. An object with no placement tiles
97
97
  occupies no cells. It doesn't block other placements, and cell queries don't
98
- return it.
98
+ return it. A placed object with no tiles still has a `Cell`.
99
+
100
+ `NeoSpriteObject` extends `NeoObject`. Place a sprite class like any object,
101
+ give it `Children`, and override `OnObjectSpawned`/`OnObjectDespawned` on it.
102
+ Hooks fire on every object in a placed hierarchy, parent first; despawn runs
103
+ children first. `NeoObjectBehaviour.IsRoot` is true only on the placed root.
99
104
 
100
105
  Convert a writable placement without changing its row identity or cell:
101
106
 
@@ -152,6 +157,14 @@ NeoVariant<ExampleObject> Down = new(
152
157
  deltas over existing instances. They may use inferred `new { ... }` or
153
158
  explicit `new Partial<T> { ... }`, and never pass arguments to or invoke
154
159
  `T`'s constructor—even when `T` has a required constructor.
160
+ - `Variants.X.Initialize()` runs `initialize`, then `overrides` and child
161
+ overrides. `ToVariant` runs `apply`, then `overrides` and child overrides; it
162
+ never reruns `initialize`. An instance remembers both: the variant that built
163
+ it and the variant last applied. The applied variant's overrides win where
164
+ they answer, `apply` writes stay as instance overrides, and
165
+ `ToVariant(Base)` removes the applied layer. On an object nested inside
166
+ another instance's construction, `ToVariant` applies the layers in place and
167
+ records nothing.
155
168
 
156
169
  Folders are records too, declared as their own globals and assigned per
157
170
  variant. Nesting is spelled in the path with `/`; intermediate segments are
@@ -129,7 +129,7 @@ wrappers.
129
129
  The marker near the top of `SKILL.md` must exactly match the package version:
130
130
 
131
131
  ```html
132
- <!-- reviewed-through-cli: 0.80.0 -->
132
+ <!-- reviewed-through-cli: 0.81.1 -->
133
133
  ```
134
134
 
135
135
  The quoted version above is checked too, so this instruction cannot go stale
@@ -35,8 +35,9 @@ names with readable ones. It keeps chosen names and rewrites references. Use
35
35
  declaration file grouping already recorded by the workspace, while
36
36
  declarations with no prior placement use the canonical per-declaration layout. Use `--force` only to discard local edits for the server
37
37
  version. Normal pulls persist a transaction cursor and fetch only changed
38
- records. Dictionary string keys, including Unicode, round-trip through full and
39
- incremental reads. If the remote head is unchanged, pull preserves the local source
38
+ records. Dictionary string keys, including Unicode, `_id`, `$name`, and `__proto__`,
39
+ round-trip through full and incremental reads. String keys may be empty or contain
40
+ whitespace; enum keys must name a live enum option. If the remote head is unchanged, pull preserves the local source
40
41
  without compiling it; use `neo status` to inspect local edits and diagnostics.
41
42
  Pull ignores records whose hashes already match the saved server baseline,
42
43
  including echoes of this checkout's last push, and advances its cursor without
@@ -163,6 +163,10 @@ A static field that names another static copies a value, as in
163
163
  `public static int B = Holder.A;`. A class, List, Set, or Dictionary static
164
164
  already owns its value, so call `Clone()` or use `Reference`. A static delegate cannot copy another Class's delegate field,
165
165
  because its closure compiles in its own Class; wrap it as `() => Other.Call()`.
166
+ Omitted constructor fields use their authored defaults, including optional fields.
167
+ Writable collection defaults belong to each instance; mutations persist on later
168
+ reads without changing another instance's default. Fields without defaults remain
169
+ absent, and `null` arguments in generated member-wise constructors mean omission.
166
170
  Collection type arguments in constructions, such as `new Box<List<int>>([1, 2])`,
167
171
  work even when no field declares that collection type. Preparation includes the
168
172
  needed type descriptors; spec-only types remain in the test candidate.
@@ -278,11 +278,14 @@ rows stay reachable through the creation data that already named them.
278
278
 
279
279
  Defaulted members may be added without recreating existing instances, including
280
280
  instances whose sparse arguments are retained only as constructor data.
281
- A construction whose durable constructor arguments changed, whose
282
- class changed, or which predates a required constructor parameter fails with
283
- `construction-arguments-conflict` instead of silently replaying a different
284
- recipe. Edit members supported by the recorded construction, or delete and
285
- recreate the value.
281
+ Source is authoritative for a construction: editing its constructor arguments,
282
+ including a static's, rebuilds the instance in place on push. The value keeps
283
+ its ID, rows at unchanged positions keep theirs, added entries create rows,
284
+ removed entries delete them, and the stored creation data records the new
285
+ arguments. Overrides the rebuilt construction no longer produces are deleted,
286
+ so keep them in the construction's `{ ... }` block. A construction whose class
287
+ changed fails with `construction-arguments-conflict`; delete and recreate the
288
+ value to change its class.
286
289
 
287
290
  Write main-locale text directly in localizable string initializers. Pull/lower
288
291
  retargets only the edited assignment. Equal primary-locale text on the same