@neocompose/cli 0.68.1 → 0.68.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.
@@ -49549,6 +49549,12 @@ var SOURCE_TYPE_NAME_BY_MEMBER_KIND_NUMBER = new Map(
49549
49549
  ])
49550
49550
  );
49551
49551
 
49552
+ // src/project-source/value-sources.ts
49553
+ var INITIALIZER_KEY_PLACEHOLDER = new RegExp(
49554
+ `${PENDING_ID_PREFIX}reference-key:init:\\d+`,
49555
+ "g"
49556
+ );
49557
+
49552
49558
  // src/project-manifest/record-adapters/enum.ts
49553
49559
  var ENUM_SCHEMA_RECORD_ADAPTER = {
49554
49560
  recordKind: "enum",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.68.1",
3
+ "version": "0.68.3",
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.68.1 -->
12
+ <!-- reviewed-through-cli: 0.68.3 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -63,8 +63,9 @@ opaque JSON or guessed syntax.
63
63
  values, files, or other records. `@system` is reserved for platform-owned
64
64
  system records; authoring it can make the record uneditable.
65
65
  - Preserve existing `@id` annotations through rename, reorder, and file moves.
66
- A new row cannot reuse a stored row's `@id`, including inside a new parent:
67
- author the new row without it.
66
+ A copy must get a new ID. A stored nested class value may keep its UUID-v4
67
+ when moved between compatible empty fields on existing parents, provided
68
+ its old parent no longer declares it. See the identity reference for limits.
68
69
  - Omit `@id` on new ordinary declarations and nested rows unless a same-push
69
70
  structural reference genuinely requires an explicit UUID. A successful push
70
71
  assigns the durable IDs and rewrites source.
@@ -78,7 +78,7 @@ run with `npm run lint:architecture`.
78
78
 
79
79
  Keep project context refreshable without accumulating stale Monaco providers or
80
80
  LSP state. Preserve diagnostics, completion, hover, signatures, definition,
81
- references, rename, symbols, semantic tokens, code actions, and formatting
81
+ references, implementations, rename, symbols, semantic tokens, code actions, and formatting
82
82
  parity for `.neo` and `.neoflow`.
83
83
 
84
84
  The CLI prepares every push with the server's own preparation code: it
@@ -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.68.1 -->
113
+ <!-- reviewed-through-cli: 0.68.3 -->
114
114
  ```
115
115
 
116
116
  The quoted version above is checked too, so this instruction cannot go stale
@@ -57,12 +57,33 @@ keys as quoted IDs when their option has been deleted.
57
57
 
58
58
  ## Identity rules
59
59
 
60
- Preserve every existing ID through rename, reorder, and file moves. A new row
61
- cannot reuse a stored row's `@id`, including inside a new parent, and source
62
- cannot place one stored row in two collection positions. For a new ordinary record, omit
60
+ Preserve every existing ID through rename, reorder, and file moves. A copy
61
+ must get a new ID. A stored nested class value may keep its UUID-v4 when moved
62
+ to an empty, compatible class field on another existing parent. Remove its
63
+ old owning declaration in the same push. Both fields must declare the same
64
+ non-generic class and storage rules. The move must leave exactly one owning
65
+ path to the same root or static binding through ordinary class fields.
66
+ Both ownership paths must use inherited storage and automatic distribution;
67
+ member overrides are not supported for moves. Moving
68
+ projected values, constructor-owned slots, partitioned values, generic
69
+ instances, or unordered-list entries is refused. Moves into newly constructed
70
+ parents are also refused; omit the ID to create a new value there.
71
+
72
+ For a new ordinary record, omit
63
73
  `@id` and let a successful real push assign and insert it. Dry-run and failed pushes
64
74
  leave tracked source unchanged.
65
75
 
76
+ A local initializer's existing row ID may precede its variable declaration:
77
+
78
+ ```neo
79
+ @id("existing-quest-row-id")
80
+ Quest HardAsStone = new Quest() { Name = "Hard as stone" };
81
+ ```
82
+
83
+ This names the initializer row. It does not create a stored global. The inline
84
+ `Quest HardAsStone = @id("...") new Quest();` spelling is also accepted, and
85
+ formatting moves its ID above the declaration. Do not put an ID in both places.
86
+
66
87
  Nested class/list rows remain independently addressable and keep inline IDs:
67
88
 
68
89
  ```neo
@@ -80,6 +101,11 @@ form, an author may assign a previously unseen UUID-v4 with `@id` to the new
80
101
  row and reference it in the same edit. Reusing an existing ID means update, not
81
102
  create. The server validates authored new IDs for UUID-v4 shape and uniqueness.
82
103
  Prefer generated IDs unless the structural reference needs an ID immediately.
104
+ Dry-run preserves a valid authored UUID-v4 ID on a new nested member or dictionary
105
+ value, including one declared as a local initializer. An unknown malformed member
106
+ value ID is an error at its annotation; remove `@id` to let push assign the ID,
107
+ or supply an unused UUID v4. This does not change the derived identity of a
108
+ root/static binding or an existing projected value.
83
109
 
84
110
  Do not invent IDs for structural rows whose identities derive from an owner
85
111
  role. Do not add a separate root/static initializer ID. A constructor argument