@neocompose/cli 0.19.3 → 0.19.5
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 +136 -0
- package/README.md +17 -12
- package/dist/neo.mjs +10323 -190
- package/package.json +2 -1
- package/skills/neocompose-cli/SKILL.md +115 -524
- package/skills/neocompose-cli/agents/openai.yaml +4 -0
- package/skills/neocompose-cli/references/animation-and-world-authoring.md +218 -0
- package/skills/neocompose-cli/references/cli-development.md +110 -0
- package/skills/neocompose-cli/references/commands-and-sync.md +130 -0
- package/skills/neocompose-cli/references/declarations-and-construction.md +217 -0
- package/skills/neocompose-cli/references/neoscript.md +150 -0
- package/skills/neocompose-cli/references/values-identities-and-references.md +158 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,141 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.19.5] - 2026-08-02
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- `neo pull` no longer fails with `Stored member value … was not pulled` when
|
|
8
|
+
the workspace holds a newly declared stored static member. Its content is
|
|
9
|
+
carried as a seed until a push materializes it, while the member record
|
|
10
|
+
already binds the pending row, so emitting the local side walked a row the
|
|
11
|
+
document does not contain. The seed is overlaid for emission; rows the
|
|
12
|
+
document already carries win.
|
|
13
|
+
|
|
14
|
+
## [0.19.4] - 2026-08-01
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- `neo push --dry-run` rehearses the server's preparation phase — schema-commit
|
|
19
|
+
materialization, seeded structural rows, and whole-graph validation — against
|
|
20
|
+
the pulled document. A rejection that previously cost a real push and
|
|
21
|
+
returned an opaque `preparation-failed` now reports before anything is sent.
|
|
22
|
+
Everything that grades the live head stays server-only.
|
|
23
|
+
- Resolve `Reference<T>(key: "...")` written as a member's declaration default,
|
|
24
|
+
including against a row the same push creates. The key was previously
|
|
25
|
+
persisted verbatim as though it were a row id, so every instance default
|
|
26
|
+
materialized from that member pointed at nothing.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- A `Reference` call whose sole argument is neither `id:` nor `key:` names
|
|
31
|
+
itself in the error instead of being read as an id.
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- Seed a member's declaring-class generic environment at every value-graph
|
|
36
|
+
root, in both the static binding graph validator and the authored/default
|
|
37
|
+
seed materializers. An override placed on a generic subclass could not
|
|
38
|
+
compute its own `genericBindings` stamp and stayed unresolved.
|
|
39
|
+
- Admit a project root member as a value-graph root. Root-member seeds were
|
|
40
|
+
admitted and then rejected for having no declaring class, which no root has.
|
|
41
|
+
- Recognize a world placement row's `assetClassId` / `assetValueId` sidecar in
|
|
42
|
+
the schema walkers, and preserve it when the row is rebuilt. Any project with
|
|
43
|
+
authored tile-grid content failed to push.
|
|
44
|
+
- Materialize authored keys before building defaults, so a required slot whose
|
|
45
|
+
declared class is abstract no longer fails when the authored row supplies the
|
|
46
|
+
concrete class.
|
|
47
|
+
- Count a re-authored value row once per graph rather than once per copy. A
|
|
48
|
+
tile grid whose placements were all re-authored reported each row as aliased
|
|
49
|
+
more than once.
|
|
50
|
+
- Resolve a single-select lookup member to its entry type. Its declared type
|
|
51
|
+
rendered as `Set<entry>` regardless of arity, so a conforming initializer
|
|
52
|
+
body was rejected against a type the source never spells.
|
|
53
|
+
- Compile a required constructor's call sites as construction. A P49 class was
|
|
54
|
+
named by `requiredConstructorId` alone, and every route that projects a class
|
|
55
|
+
into the language contract read only `constructorIds`, so an S1 class looked
|
|
56
|
+
like it declared no constructor.
|
|
57
|
+
- Report member-body compile failures with the member, the value row, and the
|
|
58
|
+
authored file and line instead of a bare `1:1:`.
|
|
59
|
+
- Omit `constraint` from a re-emitted unconstrained generic parameter. The
|
|
60
|
+
emitter spelled it `constraint: null` where the stored record has no such
|
|
61
|
+
key, so every generic class differed from itself on every push — which the
|
|
62
|
+
`@system` protection gate rejects as an edit to platform data.
|
|
63
|
+
|
|
64
|
+
## [0.19.3] - 2026-08-01
|
|
65
|
+
|
|
66
|
+
### Changed
|
|
67
|
+
|
|
68
|
+
- Enforce the `@system` authoring invariant end to end. The annotation is
|
|
69
|
+
platform-only and belongs to `system_` records; project source must never
|
|
70
|
+
carry it, and an override never inherits it.
|
|
71
|
+
|
|
72
|
+
### Fixed
|
|
73
|
+
|
|
74
|
+
- Resolve same-push static graph visibility, so a lookup target created by the
|
|
75
|
+
same push is found rather than reported missing.
|
|
76
|
+
|
|
77
|
+
## [0.19.2] - 2026-08-01
|
|
78
|
+
|
|
79
|
+
### Changed
|
|
80
|
+
|
|
81
|
+
- `optionKeyOrder` is optional on an enum record, matching the class
|
|
82
|
+
`schemaKeyOrder` and interface `memberKeyOrder` guards. The CLI drops a
|
|
83
|
+
declaration order that equals the natural key order, which for pending option
|
|
84
|
+
ids is exactly the push that creates the enum. No migration: this only widens
|
|
85
|
+
what is accepted.
|
|
86
|
+
- `neo push --dry-run` runs the per-record domain guards over the records it is
|
|
87
|
+
about to send, so a server rejection surfaces locally with the one thing the
|
|
88
|
+
server cannot know — the file it came from. `project-file` and
|
|
89
|
+
`localized-text` creates are deliberately excluded.
|
|
90
|
+
|
|
91
|
+
## [0.19.1] - 2026-08-01
|
|
92
|
+
|
|
93
|
+
### Changed
|
|
94
|
+
|
|
95
|
+
- `neo push --dry-run` runs the whole local pipeline, including the emit
|
|
96
|
+
direction: bundle emission, pending-id assignment on a clone, transport
|
|
97
|
+
shapes, upload hashing, and the client-side repeat of the server's commit
|
|
98
|
+
verification. It previously returned before re-emitting records back into
|
|
99
|
+
source, so half of the push had no rehearsal at all.
|
|
100
|
+
|
|
101
|
+
### Fixed
|
|
102
|
+
|
|
103
|
+
- Seed a member default's generic environment from its declaring class's
|
|
104
|
+
extends chain, and close the same hole in `renderMemberType` on the
|
|
105
|
+
declaration side.
|
|
106
|
+
- Admit the pending-id prefix in the enum option `@id` format check.
|
|
107
|
+
- Hold entry-member and required-constructor ids to the server's re-derivation
|
|
108
|
+
rather than rejecting them at the UUID v4 gate.
|
|
109
|
+
- Hang an unordered row's subtree off the row's own id, so canonical
|
|
110
|
+
reordering no longer draws different pending ids on the authored and
|
|
111
|
+
re-lowered passes.
|
|
112
|
+
- Dedent accessor and function bodies, so one body lowers to the same `code` at
|
|
113
|
+
any nesting depth.
|
|
114
|
+
|
|
115
|
+
## [0.19.0] - 2026-07-31
|
|
116
|
+
|
|
117
|
+
### Changed
|
|
118
|
+
|
|
119
|
+
- Reading through a nullable receiver is a compile error. The escapes are the
|
|
120
|
+
constructs the grammar already had: postfix `!`, `?.`, `??`, and null-check
|
|
121
|
+
flow narrowing.
|
|
122
|
+
- A `Reference` write into a narrowed lookup requires the target row's class to
|
|
123
|
+
be assignable to the declared type, across the id form, the key form, and
|
|
124
|
+
constructor projections.
|
|
125
|
+
|
|
126
|
+
### Fixed
|
|
127
|
+
|
|
128
|
+
- Type a lookup from its stored `declaredType` rather than its collection
|
|
129
|
+
entry, and stop typing every single-select lookup nullable regardless of
|
|
130
|
+
requiredness.
|
|
131
|
+
- Type an abstract `NSProperty` contract from its `returnTypeInfo` as a
|
|
132
|
+
read-only computed property instead of `unknown` and writable.
|
|
133
|
+
- Position construction-site diagnostics at their source slot rather than
|
|
134
|
+
collapsing to the root `new()`, and record all nine constructor-projection
|
|
135
|
+
argument failures as positioned, coded lowering failures.
|
|
136
|
+
- Identify member-body compile errors by class, member, and body kind, mapped
|
|
137
|
+
to the declaring `.neo` file and absolute position.
|
|
138
|
+
|
|
3
139
|
## [0.18.0] - 2026-07-31
|
|
4
140
|
|
|
5
141
|
### Added
|
package/README.md
CHANGED
|
@@ -5,10 +5,12 @@ web editor. Working-copy format 4 is Neo-native: `.neo` defines the project
|
|
|
5
5
|
model and authored values, `.neoflow` defines dialogue flows, and managed image
|
|
6
6
|
and audio files stay as ordinary binaries.
|
|
7
7
|
|
|
8
|
-
The
|
|
9
|
-
[`specs/neo-project-source-authoring.md`](https://github.com/ryanbliss/neo-compose-specs/tree/main/new-features/complete/neo-project-source-authoring.md).
|
|
10
|
-
The concise agent workflow is in
|
|
8
|
+
The current agent authoring guide is in
|
|
11
9
|
[`cli/skills/neocompose-cli/SKILL.md`](skills/neocompose-cli/SKILL.md).
|
|
10
|
+
Feature specs in
|
|
11
|
+
[`neo-compose-specs/new-features`](https://github.com/ryanbliss/neo-compose-specs/tree/main/new-features)
|
|
12
|
+
document design intent and edge cases; the released compiler, contract, and
|
|
13
|
+
tests are the executable source of truth.
|
|
12
14
|
|
|
13
15
|
## Source architecture
|
|
14
16
|
|
|
@@ -142,8 +144,9 @@ The source identifier is the persisted name. `@settings` and `@storage` are
|
|
|
142
144
|
typed by their declaration context; invalid fields and enum cases are
|
|
143
145
|
diagnostics. Swift-like `.EnumCase` syntax works whenever the expected enum
|
|
144
146
|
type is known. Focused annotations such as `@id`, `@locked`, `@hidden`,
|
|
145
|
-
|
|
146
|
-
|
|
147
|
+
and `@relations` carry cross-cutting behavior. Never author `@system`; it is
|
|
148
|
+
reserved for platform-owned system records. `@hidden` marks a class the member
|
|
149
|
+
selector and classes tree leave out; absent means visible.
|
|
147
150
|
|
|
148
151
|
Lists take repeatable `@index` and `@column` annotations naming a field on the
|
|
149
152
|
entry class. An index requires a non-localizable `string` or a single-select
|
|
@@ -187,12 +190,10 @@ is no `ValueRegistry` or generated `Values` namespace.
|
|
|
187
190
|
@storage(allowed: .Immutable)
|
|
188
191
|
class Assets {
|
|
189
192
|
@id("capitol-member-id")
|
|
190
|
-
static Outpost Capitol =
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
Image = Images.Capitol.Slice(0),
|
|
195
|
-
};
|
|
193
|
+
static Outpost Capitol = new {
|
|
194
|
+
Name = "Capitol",
|
|
195
|
+
Image = Images.Capitol.Slice(0),
|
|
196
|
+
};
|
|
196
197
|
|
|
197
198
|
@id("home-getter-id")
|
|
198
199
|
static Outpost Home {
|
|
@@ -203,13 +204,17 @@ class Assets {
|
|
|
203
204
|
}
|
|
204
205
|
```
|
|
205
206
|
|
|
207
|
+
The member ID anchors the stored binding; do not add a second ID to the static
|
|
208
|
+
initializer. Nested class and collection rows remain independently identified.
|
|
209
|
+
|
|
206
210
|
Defaults materialize once when a value is created. Existing instances do not
|
|
207
211
|
stay linked to later class-default changes. Logical lookup/dialogue references
|
|
208
212
|
use the native typed intrinsic:
|
|
209
213
|
|
|
210
214
|
```neo
|
|
211
215
|
Reference(Assets.Capitol)
|
|
212
|
-
Reference
|
|
216
|
+
Reference(root.Assets.Cosmetics.Pants)
|
|
217
|
+
Reference<PantsAsset>(key: "pants.long")
|
|
213
218
|
Reference<Dialogue>(id: "dialogue-id")
|
|
214
219
|
```
|
|
215
220
|
|