@neocompose/cli 0.62.2 → 0.64.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.62.2",
3
+ "version": "0.64.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.62.2 -->
12
+ <!-- reviewed-through-cli: 0.64.0 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -110,7 +110,7 @@ wrappers.
110
110
  The marker near the top of `SKILL.md` must exactly match the package version:
111
111
 
112
112
  ```html
113
- <!-- reviewed-through-cli: 0.62.2 -->
113
+ <!-- reviewed-through-cli: 0.64.0 -->
114
114
  ```
115
115
 
116
116
  The quoted version above is checked too, so this instruction cannot go stale
@@ -105,6 +105,12 @@ Use context-aware typed annotations:
105
105
  explicitly stored. A packed subtree shares its parent's document-size limit,
106
106
  so a write that would exceed the hard limit fails instead of falling back.
107
107
  `.Packed` is rejected on a List whose `listKind` is unordered.
108
+ - `@effect` only on a class member function. The Unity runtime runs it for
109
+ every live instance and reruns it whenever data it read changes; the web
110
+ editor, `neo test`, and dry runs never run effects. It must be an immediate,
111
+ parameterless `void` instance function with a NeoScript or abstract body.
112
+ An override without the annotation inherits; `@effect(kind: .None)` stops
113
+ an inherited effect. Use it instead of polling or relaying changes by hand.
108
114
 
109
115
  Use numeric literals for numeric limits. Keep annotations separate instead of
110
116
  inventing a generic metadata bag.
@@ -131,10 +131,16 @@ so it must call or assign. A dictionary-literal body needs parentheses,
131
131
  List<Item> ready = this.Items.Where((item) => item.Count > 0);
132
132
  ```
133
133
 
134
+ `==`, `!=`, `Contains`, `IndexOf`, and `Remove` compare Class, interface,
135
+ List, Set, and Dictionary values by identity: two reads of one stored value are
136
+ equal, and two values with identical fields are not. Primitives, enums,
137
+ vectors, and media references compare by value. The static type decides, so an
138
+ unconstrained generic `T` compares by value.
139
+
134
140
  Calling `Equals(other)` on a non-null generic value dynamically uses the
135
141
  runtime Class's one-argument `Equals` Function or NSFunction when it returns
136
142
  `bool`, including the effective override. Values without that member fall back
137
- to ordinary NeoScript equality.
143
+ to value equality.
138
144
 
139
145
  Object initializers are available in method bodies and `.spec.neo` tests:
140
146
 
@@ -240,7 +246,7 @@ other collection callbacks.
240
246
 
241
247
  Use `items.IndexOf(value)` to return the zero-based index of the first equal
242
248
  list entry, or `-1` when the value is absent. `IndexOf` is list-only and uses
243
- the same value/reference equality as `Contains`.
249
+ the same equality as `Contains`.
244
250
 
245
251
  Use `items.Insert(index, value)` to insert an entry into a writable ordered
246
252
  list. The index may range from zero through `items.Count`; the count appends