@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.
- package/CHANGELOG.md +104 -0
- package/dist/neo.mjs +3428 -491
- 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
|