@neocompose/cli 0.14.0 → 0.16.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 +107 -0
- package/dist/neo.mjs +5632 -566
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,112 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.16.0] - 2026-07-30
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Name the member a class writes with `@settings(target: Class.Member)` on the
|
|
8
|
+
class declaration. The target is schema metadata rather than a row field, so
|
|
9
|
+
it is stored on the class record, validated at push, and re-emitted by
|
|
10
|
+
`neo pull` as the same `Class.Member` path.
|
|
11
|
+
- Seven world kinds for the P48 animation segment family: `AnimationFrameBase`,
|
|
12
|
+
`AnimationSegmentFrame`, `AnimationSegment`, `SpriteAnimationSegment`,
|
|
13
|
+
`AnimationTrack`, `AnimationSegmentTrack`, and
|
|
14
|
+
`SpriteAnimationSegmentTrack`, alongside the existing clip, frame, child
|
|
15
|
+
override, and child track kinds.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Resolve an annotation's `Class.Member` path against the whole class rather
|
|
20
|
+
than its own declarations. `@settings(collection:)` and
|
|
21
|
+
`@settings(target:)` may now name a member the class inherits; naming one
|
|
22
|
+
through a subclass used to fail as unresolved.
|
|
23
|
+
- Spell a generic type argument bound to a structured leaf with its source
|
|
24
|
+
name. `SpriteInfo`, `Vector2`, and `Color` bindings validate at push and
|
|
25
|
+
emit as themselves instead of as their internal kind slug.
|
|
26
|
+
- Advance the project-schema contract to 3.8: a lookup member record carries
|
|
27
|
+
`declaredTypeInfo`, the type its declaration spells when that narrows the
|
|
28
|
+
collection's entry type. `NeoAnimationSegmentTrack.Child` is a covariant
|
|
29
|
+
override narrowed to the track's own `TChild`, and without it `neo pull`
|
|
30
|
+
re-emitted the collection entry's `NeoObjectBase` and the next push deleted
|
|
31
|
+
the narrowing.
|
|
32
|
+
- Substitute a class's generic bindings when checking an object initializer
|
|
33
|
+
against an inherited field. Assigning a member whose declared type is a
|
|
34
|
+
generic parameter was rejected against the bare parameter name; the
|
|
35
|
+
diagnostic now names the bound class.
|
|
36
|
+
- `NeoAnimationFrame` now derives from `NeoAnimationFrameBase` and
|
|
37
|
+
`NeoAnimationChildTrack` from `NeoAnimationTrackBase`; `Index`, `Child`, and
|
|
38
|
+
`StartFrame` keep their ids on the new bases. `NeoAnimationClip.Tracks`
|
|
39
|
+
holds `NeoAnimationTrackBase`, so a clip's track list is polymorphic.
|
|
40
|
+
- The animation family no longer declares `@storage(allowed: .Immutable)`;
|
|
41
|
+
each class documents what a mid-play change means instead.
|
|
42
|
+
|
|
43
|
+
## [0.15.0] - 2026-07-28
|
|
44
|
+
|
|
45
|
+
### Added
|
|
46
|
+
|
|
47
|
+
- Declare a constructor on a class and have `neo push` store it. A constructor
|
|
48
|
+
is its own record with named, non-stored parameters, an optional
|
|
49
|
+
`: base(Name: expr)` clause, and a NeoScript body; the class lists its
|
|
50
|
+
constructors in declaration order. `neo pull` re-emits each declaration after
|
|
51
|
+
the class's value members and before its callable members, and
|
|
52
|
+
`neo pull --reset` reconstructs both from the database.
|
|
53
|
+
- Store a member default as an initializer when its right-hand side needs
|
|
54
|
+
evaluating. `Foo Loud = new Foo(AllCaps: true)` and
|
|
55
|
+
`string Text = StaticFunc("bar")` now store the authored expression instead
|
|
56
|
+
of failing to lower; a list or dictionary entry can carry one of its own,
|
|
57
|
+
keeping its `@id` and staying addressable while its interior is computed.
|
|
58
|
+
- Reject a push whose workspace is not at the project head, the way `git push`
|
|
59
|
+
rejects a non-fast-forward. An initializer may read anything in the project,
|
|
60
|
+
so evaluating against a stale snapshot could compute a default that was never
|
|
61
|
+
correct for the head it lands on. Run `neo pull` first, or force the write
|
|
62
|
+
with `neo push --accept-bump`.
|
|
63
|
+
- Report every member default that flips from a stored literal to a computed
|
|
64
|
+
initializer because a class gained a parameterless constructor, and refuse the
|
|
65
|
+
push when a flip would strand rows another record points at — naming the
|
|
66
|
+
member and the referencing record.
|
|
67
|
+
- Record the committed head after every push. A synchronous commit echoes its
|
|
68
|
+
transaction hash; a durable commit recovers it from the schema signal once
|
|
69
|
+
the transaction lands, so the next push starts from the head it just wrote.
|
|
70
|
+
|
|
71
|
+
### Fixed
|
|
72
|
+
|
|
73
|
+
- Store a constructor body dedented to its canonical spelling, so the same
|
|
74
|
+
body authored at any nesting depth — or re-emitted by the canonical
|
|
75
|
+
projection — lowers to one byte-identical record. Trusted re-lowering
|
|
76
|
+
previously saw a differently indented body and rejected the push.
|
|
77
|
+
- Accept a complete NeoScript body sweep's derived-only member refreshes in
|
|
78
|
+
trusted-commit verification. A sweep recompiles stored getters whose IR
|
|
79
|
+
predates the current compiler revision; source lowering rightly reports no
|
|
80
|
+
change for them, and the verifier treated the refresh as an invented
|
|
81
|
+
semantic change, failing every schema push of a project with stale IR.
|
|
82
|
+
- Report the real differing field when a source commit mismatches trusted
|
|
83
|
+
lowering. The difference walker returned a spurious mismatch for any
|
|
84
|
+
structurally equal nested object, so the diagnostic named the wrong path.
|
|
85
|
+
- Keep a newly declared collection's entry member identity stable across
|
|
86
|
+
pushes. The entry id derived eagerly from the declaring member's pending
|
|
87
|
+
placeholder, so the stored entry disagreed with every later re-lowering,
|
|
88
|
+
flipped the collection's entry identity on the next push, and stranded the
|
|
89
|
+
original record.
|
|
90
|
+
- Compare a pulled value row's server-compiled `init.compiled` as derived
|
|
91
|
+
rather than authored, so a freshly pushed initializer row no longer reports
|
|
92
|
+
a phantom update on the next status.
|
|
93
|
+
|
|
94
|
+
### Changed
|
|
95
|
+
|
|
96
|
+
- Reject constructor overloads that share an argument-name set, and overloads
|
|
97
|
+
that differ only by parameter name, at lowering rather than at commit.
|
|
98
|
+
Generated C# emits one constructor per overload, so a name-only difference
|
|
99
|
+
would produce the same signature twice.
|
|
100
|
+
- Advance the project-schema contract to 3.6: the class record carries
|
|
101
|
+
`constructorIds` and the new `constructor` record kind carries `classId`,
|
|
102
|
+
`argumentTypes`, `code`, `baseArguments`, and `docsText`.
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
|
|
106
|
+
- Name the owning initializer when a constructor projection points at a row that
|
|
107
|
+
only exists inside a computed default. Storage sees a dangling id; the
|
|
108
|
+
diagnostic now says which initializer would have produced it.
|
|
109
|
+
|
|
3
110
|
## [0.14.0] - 2026-07-28
|
|
4
111
|
|
|
5
112
|
### Added
|