@neocompose/cli 0.61.2 → 0.61.4

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.61.2",
3
+ "version": "0.61.4",
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.61.2 -->
12
+ <!-- reviewed-through-cli: 0.61.4 -->
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.61.2 -->
113
+ <!-- reviewed-through-cli: 0.61.4 -->
114
114
  ```
115
115
 
116
116
  The quoted version above is checked too, so this instruction cannot go stale
@@ -219,6 +219,10 @@ qualified static, or reached through a stable root path. For example,
219
219
  `protected int Slots = FeatureFlags.StartInventorySize;` evaluates the current
220
220
  static field or getter whenever a new instance is constructed; it is not baked
221
221
  into a persisted literal during push.
222
+ Root paths such as `root.Save.World.Time.Year` remain executable even when
223
+ `World` and `Time` exist only through construction defaults. This also applies
224
+ inside `new() { Year = root.Save.World.Time.Year }`: the child field retains
225
+ its initializer and reads the root when the instance is constructed.
222
226
 
223
227
  Declare overloadable constructors as members when each constructor body owns
224
228
  its parameter scope:
@@ -158,6 +158,11 @@ chain, so `config.Hat?.Head.Idle.Down.Frames` safely returns null when `Hat` is
158
158
  null. A descendant that is itself nullable still needs its own `?.`, `??`, `!`,
159
159
  or narrowing guard before the next access.
160
160
 
161
+ Inside an instance body, `Member` and `this.Member` share null and type-check
162
+ narrowing. A local or parameter named `Member` shadows the implicit member;
163
+ `this.Member` still names the instance field. Reassigning a narrowed path to a
164
+ nullable value clears its non-null fact.
165
+
161
166
  Treat lookup-return values with the same nullable narrowing rules.
162
167
 
163
168
  Runtime declaration patterns follow the possible runtime type, not only the
@@ -130,7 +130,11 @@ the edit is not a target, and lookup/dialogue references must still satisfy
130
130
  assignability, collection membership, multiplicity, and group constraints.
131
131
 
132
132
  `collectionValue` references follow the same post-push resolution and
133
- membership rules as member defaults.
133
+ membership rules as member defaults. Name the collection itself, for example
134
+ `Reference(root.Assets.Quests.Daily)`. A path may traverse construction defaults
135
+ and declarations created in the same push. Preparation materializes the target
136
+ collection and its required ancestor rows together, preserving the virtual
137
+ identities. No preliminary push or manual value ID is needed.
134
138
 
135
139
  ## Defaults and localization
136
140