@neocompose/cli 0.2.1 → 0.2.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.
package/README.md CHANGED
@@ -94,6 +94,9 @@ 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
98
+ replaceable binding and are not copied into instances; instance and static
99
+ receiver kinds cannot be changed in place.
97
100
  - Method signatures define function arguments and returns. `Task`/`Task<T>`
98
101
  means deferred execution. The bundled source generator gives concrete
99
102
  partial declarations inert compile-time implementations; authored schema
@@ -106,6 +109,18 @@ public abstract partial class InventoryItem<
106
109
  settings use strongly typed object initializers. Their complete option sets
107
110
  participate in normal C# IntelliSense.
108
111
 
112
+ For example, a concrete non-generic type can declare a type-owned stored
113
+ member:
114
+
115
+ ```csharp
116
+ [NeoType("type-game-rules")]
117
+ public partial class GameRules
118
+ {
119
+ [NeoMember("attribute-encounter-count")]
120
+ public static int EncounterCount { get; set; }
121
+ }
122
+ ```
123
+
109
124
  Only statically analyzable expressions are accepted: literals, enum values,
110
125
  `nameof`, `typeof`, arrays/collections, object initializers, and approved
111
126
  `Neo.*` reference constructors. The compiler never loads or executes the
@@ -165,6 +180,24 @@ bool UsePrimary(InventoryItem this, Root root) {
165
180
  }
166
181
  ```
167
182
 
183
+ All executable body kinds use the same mutation-capable resolver and executor.
184
+ Getters and code-authored conditions may write to Save, Session, runtime, or
185
+ setter-backed targets; Immutable targets remain read-only. Body kind still
186
+ controls return/deferred-call rules, not storage writability.
187
+
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
191
+ generated C#. Optional parameters have inferred `null` defaults and are
192
+ positional, so pass `null` to skip an earlier optional slot. Constructor-call
193
+ signature help and parameter-name inlay hints come from that shared signature;
194
+ the names are previews, not authored named-argument syntax.
195
+ Fresh constructor graphs use Session ownership and are reclaimed at invocation
196
+ completion unless attached, returned, passed onward, or otherwise escaped.
197
+
198
+ Static access uses the declaring type (`GameRules.EncounterCount`); stored
199
+ static members resolve through their authored, Save, or Session binding layer.
200
+
168
201
  The browser-safe `neoscript-language` package is authoritative for the CLI,
169
202
  server compiler, web Monaco editor, and VS Code LSP. Monaco's existing syntax
170
203
  highlighting, comments/interpolation, scaffolds and protected regions,
@@ -187,8 +220,14 @@ uses the same results; marketplace publication is a separate release step.
187
220
  | `push [--dry-run] [--accept-bump]` | Preview or commit one atomic compare-and-swap transaction |
188
221
  | `dev [--push]` | Watch the Convex sync signal and local files; pushing remains opt-in |
189
222
  | `resolve --mine\|--theirs` | Conflict-marker convenience; editing the final source is authoritative |
190
- | `script check\|compile\|eval\|apply` | Use the shared NeoScript compiler/evaluator |
191
- | `records` / `values` / `loc` / `dialogue` | Read and batch-edit content without materializing it as schema files |
223
+ | `script check\|compile\|eval\|apply` | Use the shared NeoScript compiler/evaluator and report values, writes, and surviving Session rows |
224
+ | `records` / `values` / `loc` / `dialogue` | Read and batch-edit content, including stored static bindings, without schema-source value files |
225
+
226
+ `neo script eval --json` reports `value`, ordered `writes`, and
227
+ `createdSessionValues`. The last field contains only constructor rows that
228
+ escaped invocation cleanup. Use `neo values bind`, `neo values unbind`, or an
229
+ atomic `neo values create ... --bind <staticAttributeId>` operation to manage
230
+ an authored stored-static binding.
192
231
 
193
232
  The central invariant is unchanged: a pull followed immediately by status or
194
233
  push must produce no changes. The manifest contract classifies every field as