@neocompose/cli 0.84.1 → 0.84.3

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.
@@ -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.84.1 -->
12
+ <!-- reviewed-through-cli: 0.84.3 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -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.84.1 -->
132
+ <!-- reviewed-through-cli: 0.84.3 -->
133
133
  ```
134
134
 
135
135
  The quoted version above is checked too, so this instruction cannot go stale
@@ -24,6 +24,15 @@ Keep computed getters, setters, functions, dialogue logic, group logic, and
24
24
  constructors inline in their owning `.neo` or `.neoflow` declaration. Do not
25
25
  create `Scripts/<Class>/<Member>.neo` sidecars.
26
26
 
27
+ Explicit constructions such as `new MissingClass(5)` require a declared type,
28
+ including inside stored object initializers, constructor arguments, and collections.
29
+ The editor reports an unresolved class at its type name and refreshes the diagnostic
30
+ when the declaration changes. Contextual `new(...)` still uses the expected type.
31
+
32
+ If resolving a stored reference encounters an invalid initializer elsewhere,
33
+ the diagnostic points to that initializer's authored file and position. Fix the
34
+ reported initializer; a valid downstream `Reference(...)` is not the error site.
35
+
27
36
  Declare a setter's value type explicitly with the canonical form
28
37
  `set(int value) { ... }`. Project analysis, candidate materialization, and
29
38
  focused script commands all use the same accessor extraction. A property can have at most one getter and one setter. Concrete setters need a body (an empty body is a valid no-op); typed setters must use the property type and the parameter name `value`. Abstract and interface properties declare bodyless accessor contracts.
@@ -103,6 +112,18 @@ A generic receiver may call methods from its class or interface constraint,
103
112
  including void calls used as statements. Generic arguments substitute through
104
113
  the constraint; nullable receivers still require narrowing or null handling.
105
114
 
115
+ Runtime `is` tests on generic values check whether the bound can overlap the
116
+ tested type. A class bound need not implement an interface itself when a
117
+ subclass can implement it. A successful pattern binding exposes that interface's
118
+ members, including after `if (item.Data is not IReceiver receiver) continue;`.
119
+ Sealed classes without the interface and unrelated class bounds remain disjoint.
120
+
121
+ An interface guard also narrows the original receiver without a pattern binding.
122
+ After `if (item is not IReceiver) continue;`, `item` exposes both its declared
123
+ class members and `IReceiver` members. The same applies to guards that return,
124
+ throw, or break. Reassignment clears the proof, and paths that did not pass the
125
+ guard cannot use it.
126
+
106
127
  Functions, natives and interface functions can declare their own type
107
128
  parameters after the name, each with an optional constraint and default:
108
129
 
@@ -254,6 +254,17 @@ and declarations created in the same push. Preparation materializes the target
254
254
  collection and its required ancestor rows together, preserving the virtual
255
255
  identities. No preliminary push or manual value ID is needed.
256
256
 
257
+ An object Root.neo writes is init-built when its class has an `init` block. A
258
+ declaration binding may name a member inside it, and the push stores that
259
+ member's row so the binding has a target. A reference an `init` block or
260
+ constructor captures, such as `new Rule(Reference(this.Weather))`, stores its
261
+ target's ID and keeps the target's row. Status refuses two forms, because their
262
+ target has no row to check until the push stores it: a value row's reference to
263
+ a member of an init-built object (bind it from a declaration instead), and a
264
+ binding to a class or list an `init` block builds. A project an older CLI pushed
265
+ with such a captured reference stored it without its target; push once to
266
+ repair it.
267
+
257
268
  ## Defaults and localization
258
269
 
259
270
  A class member whose default constructs its declared type emits a contextual