@neocompose/cli 0.24.9 → 0.25.1
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
CHANGED
|
@@ -1,5 +1,76 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.25.1] - 2026-08-09
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Stop `First`, `FirstOrDefault`, and collection `Contains` scans as soon as their result is known. Terminal scans now resolve and charge only visited entries, preserve list/dictionary order and value-reference identity, and avoid intermediate entry arrays (P55).
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Seed the owned rows for a field a newly declared member adds to a
|
|
12
|
+
row-backed class default, instead of refusing the push with "no existing
|
|
13
|
+
owned value row". Adding an entry to a row-backed _list_ default has always
|
|
14
|
+
minted its rows; a class field now takes the same path, so replacing a class
|
|
15
|
+
member (`Name = "Blue"` → `Kind = .Blue` across every default that sets it)
|
|
16
|
+
pushes without editing each default in the web editor first. An `@id` on the
|
|
17
|
+
new field is honoured when it names an existing row and, when it does not,
|
|
18
|
+
held to the same UUID v4 identity rule list entries follow.
|
|
19
|
+
- Carry only the new rows and the ancestors that reach them in a member value
|
|
20
|
+
seed. Naming every row the pass touched made the seed depend on which
|
|
21
|
+
constructions the materialization cache preserved that run — so a push and
|
|
22
|
+
its own trusted re-lowering disagreed — and handed back rows stripped of the
|
|
23
|
+
`constructorArgs` a seed row cannot carry, which then failed to project back
|
|
24
|
+
to source. Pushing a new row anywhere under `root.Assets` previously failed
|
|
25
|
+
with "Authored value row … is missing memberId".
|
|
26
|
+
- Drop a stored class body key whose member the push deletes, instead of
|
|
27
|
+
carrying it into a schema that no longer has it while the same push
|
|
28
|
+
tombstones the row it names.
|
|
29
|
+
- Treat a member value seed as pushable work on its own. Adding a row to an
|
|
30
|
+
unordered list moves no stored record — membership is the new row's
|
|
31
|
+
`containerId` — so `neo status` and `neo push` reported a clean working copy
|
|
32
|
+
and silently dropped it. `neo status` now reports pending seeds too.
|
|
33
|
+
- Accept a stored row that spells "no class" as an explicit `null`, and adopt
|
|
34
|
+
the declared storage partition for an unstamped row reached through its
|
|
35
|
+
owning slot, in constructed static value graph validation. Rows materialized
|
|
36
|
+
before their partition was stamped (object-tree `Enabled`, P41 §4.3) sit in
|
|
37
|
+
main under a partitioned parent and failed a push over data it never wrote. A
|
|
38
|
+
row already stamped for a different partition is still rejected.
|
|
39
|
+
|
|
40
|
+
## [0.25.0] - 2026-08-07
|
|
41
|
+
|
|
42
|
+
### Added
|
|
43
|
+
|
|
44
|
+
- Add the `NeoAction<P1, …>` member kind (P62): multicast void members whose
|
|
45
|
+
listener set is ordinary durable data. Authored defaults use a listener-list
|
|
46
|
+
literal of method groups (`public NeoAction<int> OnDamaged = [PlayHitFlash];`),
|
|
47
|
+
`+=`/`-=` in NeoScript are set-semantic member-value writes deduplicated by
|
|
48
|
+
`(memberId, valueId)` identity, and invocation fans out sequentially through
|
|
49
|
+
the existing delegate member-target dispatch (empty set is a no-op; a
|
|
50
|
+
throwing listener fails fast with a `{action}[{row}] listener {index}` frame).
|
|
51
|
+
- Lower and emit NSAction members round-trip in project source, including the
|
|
52
|
+
manifest `action` record kind with an `arguments` key and arity ≤ 16.
|
|
53
|
+
- Compiled bodies containing the new `callAction` pointer or the
|
|
54
|
+
`addActionListener`/`removeActionListener` instructions claim compiler
|
|
55
|
+
revision 8; every stored body at revision ≤ 7 stays valid with no recompile.
|
|
56
|
+
|
|
57
|
+
### Changed
|
|
58
|
+
|
|
59
|
+
- The NeoScript evaluator's schema-resolution cache (compiled bodies, schema
|
|
60
|
+
walks, callable signatures) now survives across top-level evaluations and is
|
|
61
|
+
invalidated by document edits, instead of being rebuilt cold per call —
|
|
62
|
+
repeated `neo test`/`neo script` evaluations and NSAction fan-out drop from
|
|
63
|
+
~45 us to ~26 us per invocation, ~4 us per additional listener.
|
|
64
|
+
- Unity export schema version is now 17: exports carry NSAction members and
|
|
65
|
+
generated C# surfaces them as cached `NeoAction<P1, …>` registry properties
|
|
66
|
+
with `[NeoMemberMethod]`-stamped listener targets. Older exports are
|
|
67
|
+
rejected with instructions to regenerate.
|
|
68
|
+
- A lambda literal is a compile error at every action listener position
|
|
69
|
+
(authored default, constructor argument, `+=`), and an action member is
|
|
70
|
+
never nullable, never a value, and never a return type; diagnostics point at
|
|
71
|
+
extracting an `NSFunction` member or subscribing through the member
|
|
72
|
+
reference.
|
|
73
|
+
|
|
3
74
|
## [0.24.9] - 2026-08-08
|
|
4
75
|
|
|
5
76
|
### Fixed
|