@neocompose/cli 0.13.0 → 0.15.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 +104 -0
  2. package/dist/neo.mjs +3428 -491
  3. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,109 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.15.0] - 2026-07-28
4
+
5
+ ### Added
6
+
7
+ - Declare a constructor on a class and have `neo push` store it. A constructor
8
+ is its own record with named, non-stored parameters, an optional
9
+ `: base(Name: expr)` clause, and a NeoScript body; the class lists its
10
+ constructors in declaration order. `neo pull` re-emits each declaration after
11
+ the class's value members and before its callable members, and
12
+ `neo pull --reset` reconstructs both from the database.
13
+ - Store a member default as an initializer when its right-hand side needs
14
+ evaluating. `Foo Loud = new Foo(AllCaps: true)` and
15
+ `string Text = StaticFunc("bar")` now store the authored expression instead
16
+ of failing to lower; a list or dictionary entry can carry one of its own,
17
+ keeping its `@id` and staying addressable while its interior is computed.
18
+ - Reject a push whose workspace is not at the project head, the way `git push`
19
+ rejects a non-fast-forward. An initializer may read anything in the project,
20
+ so evaluating against a stale snapshot could compute a default that was never
21
+ correct for the head it lands on. Run `neo pull` first, or force the write
22
+ with `neo push --accept-bump`.
23
+ - Report every member default that flips from a stored literal to a computed
24
+ initializer because a class gained a parameterless constructor, and refuse the
25
+ push when a flip would strand rows another record points at — naming the
26
+ member and the referencing record.
27
+ - Record the committed head after every push. A synchronous commit echoes its
28
+ transaction hash; a durable commit recovers it from the schema signal once
29
+ the transaction lands, so the next push starts from the head it just wrote.
30
+
31
+ ### Fixed
32
+
33
+ - Store a constructor body dedented to its canonical spelling, so the same
34
+ body authored at any nesting depth — or re-emitted by the canonical
35
+ projection — lowers to one byte-identical record. Trusted re-lowering
36
+ previously saw a differently indented body and rejected the push.
37
+ - Accept a complete NeoScript body sweep's derived-only member refreshes in
38
+ trusted-commit verification. A sweep recompiles stored getters whose IR
39
+ predates the current compiler revision; source lowering rightly reports no
40
+ change for them, and the verifier treated the refresh as an invented
41
+ semantic change, failing every schema push of a project with stale IR.
42
+ - Report the real differing field when a source commit mismatches trusted
43
+ lowering. The difference walker returned a spurious mismatch for any
44
+ structurally equal nested object, so the diagnostic named the wrong path.
45
+ - Keep a newly declared collection's entry member identity stable across
46
+ pushes. The entry id derived eagerly from the declaring member's pending
47
+ placeholder, so the stored entry disagreed with every later re-lowering,
48
+ flipped the collection's entry identity on the next push, and stranded the
49
+ original record.
50
+ - Compare a pulled value row's server-compiled `init.compiled` as derived
51
+ rather than authored, so a freshly pushed initializer row no longer reports
52
+ a phantom update on the next status.
53
+
54
+ ### Changed
55
+
56
+ - Reject constructor overloads that share an argument-name set, and overloads
57
+ that differ only by parameter name, at lowering rather than at commit.
58
+ Generated C# emits one constructor per overload, so a name-only difference
59
+ would produce the same signature twice.
60
+ - Advance the project-schema contract to 3.6: the class record carries
61
+ `constructorIds` and the new `constructor` record kind carries `classId`,
62
+ `argumentTypes`, `code`, `baseArguments`, and `docsText`.
63
+
64
+ ### Fixed
65
+
66
+ - Name the owning initializer when a constructor projection points at a row that
67
+ only exists inside a computed default. Storage sees a dangling id; the
68
+ diagnostic now says which initializer would have produced it.
69
+
70
+ ## [0.14.0] - 2026-07-28
71
+
72
+ ### Added
73
+
74
+ - Stamp authored provenance on every row a materialized default produces.
75
+ Writing `new EyePart { Name = "RightEye" }` as a row in `EyesPart.Children`
76
+ copies `EyePart`'s default graph, and until now the copy had no link home:
77
+ a clip declared on `EyePart` addresses `EyePart`'s own class-default rows,
78
+ which no copy of them named, so it resolved on no nested instance at all.
79
+ Each copied row now carries the class-default row it came from, forwarding
80
+ that row's own stamp so a part three levels deep still points at the
81
+ original rather than an intermediate copy. Clips on nested class rows
82
+ resolve, at any depth, and the Unity exporter chains the stamp through a
83
+ placement unchanged. `neo pull` output is byte-identical either way.
84
+
85
+ ### Fixed
86
+
87
+ - Push two sibling bare `new()` rows of a class whose default is row-backed.
88
+ Re-lowering a declared initializer adopted the `@id` written on it as the
89
+ copy's identity — which is the class-default row's id — so
90
+ `[new EyePart(), new EyePart()]` minted one id twice and failed with
91
+ `Value construction reuses identity`, and even a single such row was
92
+ rejected by the server as an existing value. That id is now the copy's
93
+ provenance instead of its identity.
94
+ - Keep `genericBindings` and `bindingMembers` on an authored seed row across
95
+ the push transport. The schema commit route rebuilt each seed from a field
96
+ whitelist that omitted both, so an authored `NeoAnimationChildOverride` row
97
+ lost its concrete generic environment between the CLI and the server's own
98
+ re-lowering, and the push failed as a trusted-lowering mismatch.
99
+
100
+ ### Removed
101
+
102
+ - The nested-clip-owner advisory added in 0.12.0, along with the `warnings`
103
+ array `neo push --json`, `neo status --json` and `neo diff --json` carried
104
+ it in. It described a defect that provenance now fixes, so leaving it would
105
+ warn on correct code.
106
+
3
107
  ## [0.13.0] - 2026-07-28
4
108
 
5
109
  ### Added