@neocompose/cli 0.47.0 → 0.48.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.47.0",
3
+ "version": "0.48.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.47.0 -->
12
+ <!-- reviewed-through-cli: 0.48.0 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -102,9 +102,9 @@ neo/
102
102
  neo.json
103
103
  Project.neo
104
104
  Root.neo
105
- Classes/
106
- Interfaces/
107
- Enums/
105
+ Classes/{System/, ...}
106
+ Interfaces/{System/, ...}
107
+ Enums/{System/, ...}
108
108
  Relations.neo
109
109
  Templates/
110
110
  Localization.neo
@@ -122,9 +122,12 @@ Production `.neo`/`.neoflow` files and supported managed binaries are tracked.
122
122
  Colocated `.spec.neo` files are test-only and never enter status, source hashes,
123
123
  pull/reset, or push.
124
124
  Normal pull preserves declaration placement and spelling by stable ID when it
125
- can. Force/reset regenerates canonical text while retaining the declaration
126
- file grouping recorded by the workspace; declarations with no prior placement
127
- use the canonical per-declaration layout.
125
+ can. Force/reset regenerates canonical text while retaining the current declaration
126
+ paths and extracted initializer bindings, including moves made since the last
127
+ sync. New server declarations use the default layout. System declarations
128
+ default to a `System` subfolder under their category, including classes, enums,
129
+ interfaces, templates, localization statuses, and priority/dialogue groups.
130
+ Ownership comes from the reserved system identity, not the declaration name.
128
131
 
129
132
  ## Load the focused contract you need
130
133
 
@@ -165,7 +168,7 @@ Do not invent lowercase persistence-kind declarations such as `project`,
165
168
  `values`, `files`, or `relations`. Named arguments and contextual enum literals
166
169
  come from generated contracts; do not invent raw fields or property bags.
167
170
 
168
- Reusable values are static members on ordinary project classes:
171
+ Persisted reusable values are static members on ordinary project classes:
169
172
 
170
173
  ```neo
171
174
  @id("assets-class-id")
@@ -182,6 +185,29 @@ class Assets {
182
185
  The member ID anchors the stored binding. A computed static getter is an alias
183
186
  and creates no stored binding or value row.
184
187
 
188
+ Local project initializers may live in any `.neo` file and need no imports:
189
+
190
+ ```neo
191
+ List<NeoSortingLayer> SORTING_LAYERS = [
192
+ @id("existing-layer-id")
193
+ new NeoSortingLayer() { Name = "Default" }
194
+ ];
195
+ ```
196
+
197
+ Use `SortingLayers = SORTING_LAYERS` in Root or another stored initializer.
198
+ The consuming member owns the value identity; do not add an ID at the use.
199
+ Preserve existing nested IDs when extracting, and omit IDs on new rows.
200
+ An aggregate has one owning assignment. Use `Reference(SORTING_LAYERS)` only
201
+ where the receiving member permits that reference type. For independent
202
+ copies, use the editor's duplicate action or copy the initializer without IDs.
203
+ Scalars may have several owners. If those values diverge in web, pull keeps
204
+ the different server values by inlining the differing uses. Initializer
205
+ aliases are local source organization, not runtime globals or server records.
206
+ Use their names as complete value initializers; executable expressions such as
207
+ `BASE + 1` cannot access these local declarations.
208
+ The shared editor offers extract-to-file on a selected complete initializer,
209
+ inline on its sole use, and duplicate at a use. Move the created file freely.
210
+
185
211
  Declare managed files in typed registries:
186
212
 
187
213
  ```neo
@@ -199,7 +225,9 @@ AudioClipRegistry AudioClips = new() {
199
225
  ```
200
226
 
201
227
  Use `Images.Sword.Slice(0)` for a sprite and `AudioClips.SwordHit` for audio.
202
- Renaming the registry symbol, moving the local presentation, or replacing bytes
228
+ Registry declarations and their image/audio paths may be in any project folder
229
+ outside ignored/private directories. Update the registry path when moving a
230
+ binary file. Renaming the registry symbol or replacing bytes
203
231
  retains the file ID.
204
232
  Omitting `@settings(template: ...)` uses the complete built-in Unity import
205
233
  defaults for that file kind.
@@ -88,7 +88,7 @@ wrappers.
88
88
  The marker near the top of `SKILL.md` must exactly match the package version:
89
89
 
90
90
  ```html
91
- <!-- reviewed-through-cli: 0.47.0 -->
91
+ <!-- reviewed-through-cli: 0.48.0 -->
92
92
  ```
93
93
 
94
94
  The quoted version above is checked too, so this instruction cannot go stale