@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.
Files changed (3) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/dist/neo.mjs +5632 -566
  3. 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