@neocompose/cli 0.2.3 → 0.3.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/CHANGELOG.md ADDED
@@ -0,0 +1,18 @@
1
+ # Changelog
2
+
3
+ ## [0.3.0] - 2026-07-15
4
+
5
+ ### Breaking
6
+
7
+ - Replaced the format-2 schema vocabulary with strict format 3 Classes and
8
+ Members.
9
+ - Renamed generated schema sources to `Classes/*.cs`, introduced
10
+ `[NeoSchemaClass]`, and moved NeoScript sidecars to
11
+ `Scripts/<Class>/<Member>.neo`.
12
+ - Removed format-2 loading, legacy flags, record kinds, wire fields, and
13
+ compatibility conversion. Refresh existing working copies with Neo CLI 0.3.0.
14
+
15
+ ### Changed
16
+
17
+ - Updated compiler, analyzer, language-service, VS Code protocol, status,
18
+ diff, and pending-ID contracts for Class/Member terminology.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  `neo` keeps a Git-friendly C# working copy of a Neo Compose project schema,
4
4
  syncs it bidirectionally with Convex, and exposes NeoScript and content
5
- commands. Schema format v2 is compiler-backed: authored files are real C# 11,
5
+ commands. Schema format v3 is compiler-backed: authored files are real C# 11,
6
6
  not a handwritten C# subset.
7
7
 
8
8
  The complete contract is in
@@ -23,20 +23,20 @@ an executable when discovery needs an explicit override. Run `neo doctor` to
23
23
  see the selected host, its compatibility result, the discovery cache, and the
24
24
  bundled schema-contract versions.
25
25
 
26
- ## Format v2 working copy
26
+ ## Format v3 working copy
27
27
 
28
28
  ```text
29
29
  neo/
30
- neo.json # includes formatVersion: 2
30
+ neo.json # includes formatVersion: 3
31
31
  NeoCompose.Schema.csproj # netstandard2.1, C# 11, IDE-only
32
- Types/ # custom classes
32
+ Classes/ # class declarations
33
33
  Interfaces/ # Neo interfaces
34
34
  Enums/ # Neo enums
35
35
  Root.cs # [NeoRegistry] roots and loose members
36
36
  Templates/ # typed texture/audio settings
37
37
  Localization.cs # typed localization settings
38
38
  LocalizationStatuses/*.cs # typed workflow-status settings
39
- Scripts/<Type>/<Member>.neo # tracked NeoScript sidecars
39
+ Scripts/<Class>/<Member>.neo # tracked NeoScript sidecars
40
40
  Migrations/*.neo
41
41
  .neo/
42
42
  state.json # sync bases and CAS hashes
@@ -47,17 +47,17 @@ neo/
47
47
  `.neo/`, `bin/`, and `obj/` are gitignored. The C# project is an authoring
48
48
  project only; the game never references or ships it. The public
49
49
  `NeoCompose.Schema` SDK and analyzer are materialized from the npm package
50
- under `.neo/tooling`. There is no generated `Schema/NeoSchemaAttributes.cs`.
50
+ under `.neo/tooling`. There is no generated `Schema/NeoSchemaMembers.cs`.
51
51
 
52
- Format v2 is a clean break and `neo.json` must contain `formatVersion: 2`.
52
+ Format v3 is a clean break and `neo.json` must contain `formatVersion: 3`.
53
53
  A workspace with a missing or different format version is unsupported. Preserve
54
- any source you need, then create a fresh v2 working copy with:
54
+ any source you need, then create a fresh v3 working copy with:
55
55
 
56
56
  ```sh
57
57
  neo init --project <id> [--version <id>] [--dir neo]
58
58
  ```
59
59
 
60
- `neo pull --reset` remains available for an existing v2 workspace: it
60
+ `neo pull --reset` remains available for an existing v3 workspace: it
61
61
  reconstructs its managed schema files from the server and refreshes tooling.
62
62
 
63
63
  ## Real C# authoring
@@ -71,18 +71,18 @@ method arguments, return types, and deferred `Task` results.
71
71
  using System.Threading.Tasks;
72
72
  using NeoCompose.Schema;
73
73
 
74
- [NeoType("type-inventory-item")]
74
+ [NeoSchemaClass("class-inventory-item")]
75
75
  public abstract partial class InventoryItem<
76
76
  [NeoId("generic-stack-data")] TStackData>
77
77
  where TStackData : InventoryStackData
78
78
  {
79
- [NeoMember("attribute-name"), NeoText(SearchKey = true)]
79
+ [NeoMember("member-name"), NeoText(SearchKey = true)]
80
80
  public virtual string Name { get; init; } = "";
81
81
 
82
- [NeoMember("attribute-type")]
82
+ [NeoMember("member-type")]
83
83
  public abstract ItemType Type { get; init; }
84
84
 
85
- [NeoMember("attribute-description"), NeoComputed]
85
+ [NeoMember("member-description"), NeoComputed]
86
86
  public virtual string Description { get; }
87
87
 
88
88
  [NeoMember("function-use-primary"), NeoScript]
@@ -94,7 +94,7 @@ public abstract partial class InventoryItem<
94
94
  override's base member ID is resolved from the Roslyn symbol graph.
95
95
  - Property type and nullability determine Neo kind and requiredness.
96
96
  - A property initializer is its default; declaration order is schema order.
97
- - A `static` property or method is type-owned. Stored static properties use a
97
+ - A `static` property or method is class-owned. Stored static properties use a
98
98
  replaceable binding and are not copied into instances; instance and static
99
99
  receiver kinds cannot be changed in place.
100
100
  - Method signatures define function arguments and returns. `Task`/`Task<T>`
@@ -109,14 +109,14 @@ public abstract partial class InventoryItem<
109
109
  settings use strongly typed object initializers. Their complete option sets
110
110
  participate in normal C# IntelliSense.
111
111
 
112
- For example, a concrete non-generic type can declare a type-owned stored
112
+ For example, a concrete non-generic class can declare a class-owned stored
113
113
  member:
114
114
 
115
115
  ```csharp
116
- [NeoType("type-game-rules")]
116
+ [NeoSchemaClass("class-game-rules")]
117
117
  public partial class GameRules
118
118
  {
119
- [NeoMember("attribute-encounter-count")]
119
+ [NeoMember("member-encounter-count")]
120
120
  public static int EncounterCount { get; set; }
121
121
  }
122
122
  ```
@@ -127,7 +127,7 @@ Only statically analyzable expressions are accepted: literals, enum values,
127
127
  authored assembly. JSON carriers and identity escape hatches such as
128
128
  `ExtraJson`, `DefaultJson`, `RetJson`, `ArgsJson`, `EntryChainJson`,
129
129
  `SchemaKeyOrderJson`, `GenericParamIds`, `ChainJson`, `SignatureJson`,
130
- `ExtendsId`, `isVirtual`, and `isAbstract` do not exist in v2.
130
+ `ExtendsId`, `isVirtual`, and `isAbstract` do not exist in v3.
131
131
 
132
132
  Localization workflow statuses are ordinary stable records rather than IDs
133
133
  hidden in localization JSON:
@@ -150,10 +150,10 @@ public sealed partial class Approved
150
150
 
151
151
  NeoScript is tracked separately from C# metadata:
152
152
 
153
- - `Scripts/<DeclaringType>/<Member>.neo` is the only canonical path.
153
+ - `Scripts/<DeclaringClass>/<Member>.neo` is the only canonical path.
154
154
  - Every file contains its complete contextual wrapper. The outer signature
155
155
  mirrors the C# member and its NeoScript result type (`Task<T>` is represented
156
- as `T`), then adds `<DeclaringType> this, Root root`; this chrome is protected
156
+ as `T`), then adds `<DeclaringClass> this, Root root`; this chrome is protected
157
157
  in Monaco while the executable regions remain editable.
158
158
  - A computed property wrapper contains `get { ... }` and, when writable,
159
159
  `set(<Type> value) { ... }` units.
@@ -186,8 +186,8 @@ setter-backed targets; Immutable targets remain read-only. Body kind still
186
186
  controls return/deferred-call rules, not storage writability.
187
187
 
188
188
  Locals may use either an explicit type or `var`; inferred locals retain the
189
- same exact type and language features. Concrete, closed, writable Custom types
190
- support `new Type(...)` in the same required-then-optional parameter order as
189
+ same exact type and language features. Concrete, closed, writable Classes
190
+ support `new ClassName(...)` in the same required-then-optional parameter order as
191
191
  generated C#. Optional parameters have inferred `null` defaults and are
192
192
  positional, so pass `null` to skip an earlier optional slot. Constructor-call
193
193
  signature help and parameter-name inlay hints come from that shared signature;
@@ -195,7 +195,7 @@ the names are previews, not authored named-argument syntax.
195
195
  Fresh constructor graphs use Session ownership and are reclaimed at invocation
196
196
  completion unless attached, returned, passed onward, or otherwise escaped.
197
197
 
198
- Static access uses the declaring type (`GameRules.EncounterCount`); stored
198
+ Static access uses the declaring Class (`GameRules.EncounterCount`); stored
199
199
  static members resolve through their authored, Save, or Session binding layer.
200
200
 
201
201
  The browser-safe `neoscript-language` package is authoritative for the CLI,
@@ -213,7 +213,7 @@ uses the same results; marketplace publication is a separate release step.
213
213
  | Command | Purpose |
214
214
  | ----------------------------------------- | -------------------------------------------------------------------------------------------------- |
215
215
  | `login` | Device-code OAuth; use `--profile release`, `--token-stdin`, or `NEO_COMPOSE_TOKEN` as appropriate |
216
- | `init --project <id> [--version <id>]` | Scaffold a format-v2 working copy and perform the first pull |
216
+ | `init --project <id> [--version <id>]` | Scaffold a format-v3 working copy and perform the first pull |
217
217
  | `doctor` | Report runtime discovery, compatibility, cache, tooling, and contract versions |
218
218
  | `pull [--reset]` | Sync or reconstruct; normal pulls use record-level three-way merge |
219
219
  | `status` / `diff` | Compile the working copy and compare its manifest with the base |
@@ -226,7 +226,7 @@ uses the same results; marketplace publication is a separate release step.
226
226
  `neo script eval --json` reports `value`, ordered `writes`, and
227
227
  `createdSessionValues`. The last field contains only constructor rows that
228
228
  escaped invocation cleanup. Use `neo values bind`, `neo values unbind`, or an
229
- atomic `neo values create ... --bind <staticAttributeId>` operation to manage
229
+ atomic `neo values create ... --bind <staticMemberId>` operation to manage
230
230
  an authored stored-static binding.
231
231
 
232
232
  The central invariant is unchanged: a pull followed immediately by status or