@neocompose/cli 0.89.10 → 0.89.12

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.89.10",
3
+ "version": "0.89.12",
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.89.10 -->
12
+ <!-- reviewed-through-cli: 0.89.12 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -143,7 +143,7 @@ The marker near the top of `SKILL.md` must exactly match the package version,
143
143
  and this quoted copy is checked too:
144
144
 
145
145
  ```html
146
- <!-- reviewed-through-cli: 0.89.10 -->
146
+ <!-- reviewed-through-cli: 0.89.12 -->
147
147
  ```
148
148
 
149
149
  Keep this skill on current behavior. Upgrade steps, rollout prerequisites,
@@ -31,6 +31,13 @@ Foo value = new(bar: "BAR", isFun: true) { IsFun = false };
31
31
  - A header constructor disables implicit parameterless `new` and forbids
32
32
  other constructor overloads. Its derived identity takes no `@id`.
33
33
 
34
+ ## Editor support
35
+
36
+ Constructor completion, hover, and signature help use the concrete type arguments:
37
+ `Box<string>` offers a `string` argument for a parameter declared as `T`.
38
+ Target-typed constructions inside callbacks use the callback's return type for
39
+ parameter hints. Duplicate named arguments are diagnosed in local initializers.
40
+
34
41
  ## Variant parameters
35
42
 
36
43
  Constructors accept `NeoVariant<T>` and `NeoLookupVariant<T, TValue>` selections,
@@ -188,3 +195,14 @@ AudioSettings AUDIO_SETTINGS = new() {
188
195
  Main = new AudioMixerGroupSettingsFolder("Main", "Master", "MasterVolume", []),
189
196
  };
190
197
  ```
198
+
199
+ ## Reconciliation during push and export
200
+
201
+ Constructor comparisons wait for newly authored values they read, including
202
+ unordered collection entries and variant factories. Equal constructor arguments
203
+ retain the existing instance, its stored random values, and authored field edits.
204
+ Changed arguments rebuild the instance after its dependencies settle. A pending
205
+ dependency alone does not trigger reconstruction.
206
+
207
+ A concrete generic instance keeps its type arguments when stored through a base
208
+ class slot, for example `Rule value = new TypedRule<int>(1);`.
@@ -43,6 +43,9 @@ Generic bindings and their nested collection descriptors follow the owning
43
43
  declaration's identity. Deleting and recreating an idless declaration creates
44
44
  fresh bindings; retaining its pulled IDs preserves them.
45
45
 
46
+ Editor rename follows an interface member through its compatible implementations
47
+ and overrides. Unrelated members and overloads keep their names.
48
+
46
49
  ## Modifiers
47
50
 
48
51
  `public`, `protected`, `private`, `static`, `virtual`, `abstract`, `sealed`,
@@ -36,6 +36,8 @@ indentation, using the project's configured spaces or tabs.
36
36
  The editor checks computed defaults with the same expression resolver as push.
37
37
  Unknown names, missing members, invalid type arguments, and expression type
38
38
  errors appear at the offending initializer expression, including nested defaults.
39
+ This includes simple member reads such as `value.Name`: nullable receivers and
40
+ private or protected access receive the same checks as executable bodies.
39
41
 
40
42
  A default that isn't a closed literal stores as a computed initializer and
41
43
  replays for omitted members in push, web, and SDK. A stored override stays
@@ -149,3 +149,5 @@ computed properties and callable signatures for cursors; store `List<T>` data
149
149
  explicitly. Stored enumerable interface members accept authored class rows.
150
150
  Runtime sequences are shown as unenumerated and are not expanded for previews.
151
151
  `ToSet()` rejects enumerable/cursor interface elements.
152
+
153
+ `Clone()` also copies owned class values inside tuples. References inside the copied graph keep their targets.
@@ -11,7 +11,12 @@ List<Item> ready = this.Items.Where((item) => item.Count > 0);
11
11
  ```
12
12
 
13
13
  - Lambdas may be returned, stored, or assigned to typed locals. They capture
14
- surrounding locals and parameters by value when created.
14
+ surrounding locals and parameters by value when created. A non-null check
15
+ on a local remains valid inside its capture, even if the outer local is later
16
+ reassigned. This does not freeze mutable fields on captured objects.
17
+ A captured value can share a class name; member access uses the value.
18
+ - Editor completion uses the delegate parameter type inside tuple values and
19
+ named constructor arguments, including overloaded constructors.
15
20
  - `(x) => x * 2` equals `(x) => { return x * 2; }`. In a void delegate the
16
21
  expression must call or assign. Parenthesize a dictionary-literal body:
17
22
  `() => ({ "a": 1 })`.
@@ -86,6 +86,11 @@ public static T? FirstOf<T extends Item = Item>(List<T> items) => items.FirstOrD
86
86
  types. Nullable elements matched against `T?` contribute their non-null
87
87
  type. Null literals, target-typed `new()`, and empty collections supply no
88
88
  evidence, but do not discard evidence from sibling tuple elements.
89
+ - Generic functions can construct `Box<T>` using their own type parameters,
90
+ including static functions without a class receiver. Explicit and inferred
91
+ call arguments close the construction in both the CLI and SDK.
92
+ - Go to Definition on a type parameter in a local type annotation opens its
93
+ class or function declaration.
89
94
  - Function type parameters take no `@id`. Overrides declare the same count,
90
95
  constraints, and defaults but may rename them.
91
96
 
@@ -20,6 +20,11 @@ compilation on purpose.
20
20
  display text. Empty and comment-only files stay files.
21
21
  - Against a server-side deletion, keeping the record restores it as a create
22
22
  guarded by an absent-record check; removing it accepts the deletion.
23
+ - If a server deletion leaves an edited declaration without an owner, pull
24
+ uses its authored file for the local conflict side. This preserves its values
25
+ and IDs, including after a local file move. Shared members retain every
26
+ authored class declaration, including several classes in one file. Review
27
+ the marked hunks before choosing a whole side.
23
28
  - Pull warns when a conflicted record's local base strands newly downloaded
24
29
  descendant rows. Resolve it with `--mine` or `--theirs` before pushing.
25
30
  - Compiled initializer IR and other server-derived metadata never cause a
@@ -64,6 +64,10 @@ frame. For editing an existing clip, see [frame overrides](animation.md).
64
64
  as instance overrides, and `ToVariant(Base)` removes the applied layer.
65
65
  - On an object nested inside another instance's construction, `ToVariant`
66
66
  applies in place and records nothing.
67
+ - Child overrides also answer omitted fields on children with their own
68
+ constructor recipes. The child keeps its identity and unanswered defaults.
69
+ Later instance writes remain pins until an answering variant transition clears
70
+ them. Structured partials change only the named components.
67
71
  - Selections compare equal when class, variant, and bound lookup row match.
68
72
  An unset optional selection differs from `Base`.
69
73