@neocompose/cli 0.40.0 → 0.42.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 CHANGED
@@ -1,5 +1,89 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.42.0] - 2026-09-02
4
+
5
+ ### Fixed
6
+
7
+ - `neo pull --reset` and `neo pull --regenerate-source-names` rewrote every
8
+ dialogue binding to its type name. Binding names are derived from a value's
9
+ `Name` child, and the placement index read the pulled rows as stored rather
10
+ than expanding packed subtree storage first, so a packed `Name` resolved to
11
+ nothing and `Outpost CaelusAnchorpoint` came back as `Outpost Outpost`. Every
12
+ linked dialogue and node then showed up as an update in `neo status` whose
13
+ only difference was the regenerated name. The index now expands packed
14
+ children into the logical rows they are.
15
+ - `neo pull` left a member declared by more than one class disagreeing with
16
+ itself. A changed record was rewritten in the single file the emission
17
+ attributes it to, so a change to a shared member updated one class and
18
+ froze the others at their previously emitted text, and the next command
19
+ refused the CLI's own output with "Shared member id … has inconsistent
20
+ declarations." Pull now rewrites every file that declares a changed record.
21
+
22
+ ### Removed
23
+
24
+ - `neo migrate rekey`. The canonical value-id migration it served has run on
25
+ every deployment and the server no longer serves the old-to-canonical
26
+ mapping page it read, so the command had nothing left to rewrite.
27
+ `neo migrate` keeps `new | list | check | run | prune`.
28
+
29
+ ## [0.41.0] - 2026-09-01
30
+
31
+ ### Added
32
+
33
+ - `neo migrate rekey`, the one-time source refactor for the canonical
34
+ value-id migration. It reads the server's old-to-canonical mapping for the
35
+ workspace's version, rewrites `@id` pins and `Reference(id: ...)` literals in
36
+ tracked `.neo` and `.spec.neo` source, and moves `.neo/state.json` bases onto
37
+ the new ids, so the next `pull` merges field by field instead of reporting
38
+ every rekeyed value as a delete plus a create. The command refuses to write
39
+ anything when conflict markers or unresolved pull conflicts remain, when an
40
+ old id survives outside those two syntactic positions, or when the rewrite
41
+ introduces a source error. Running it a second time is a no-op.
42
+ - `@distribution(kind: .Sparse | .Packed)` on value-owning member
43
+ declarations, backed by schema contract 4.1. It chooses whether a member's
44
+ materialized value keeps its own row or is stored inside its owning parent
45
+ row.
46
+ - Omitting the annotation is a third state, not a synonym for `.Sparse`: on a
47
+ root declaration it means the automatic distribution for the member's kind
48
+ and settings, and on an override it means inherit. Pull emits the annotation
49
+ only where the field is explicitly stored and never writes an automatic
50
+ result into source.
51
+
52
+ - Read packed subtree storage. A `.Packed` child has no record of its own; it
53
+ is stored as a `{ "~packed": ... }` envelope at its position inside its
54
+ owning parent's body. The CLI now expands those envelopes into logical value
55
+ rows when it builds the stored ownership graph, so placements, emitted
56
+ source, root paths, and `neo check` see a packed child exactly as they see a
57
+ sparse one. A malformed packed payload now reports its owning row instead of
58
+ the child disappearing without a diagnostic.
59
+
60
+ - Push packed subtree storage. Value lowering keeps producing the logical row
61
+ graph; `neo status` and `neo push` now fold it into the physical rows the
62
+ server stores, through the same shared fold the server write path runs. A
63
+ packed child no longer reports a phantom create beside a spurious update of
64
+ its parent, so `pull` followed by `push --dry-run` of a packed project is
65
+ clean, and an edit of a packed member is one write of the row that stores it.
66
+ - Converge a sparse project as it is pushed. Rewriting a value row repacks the
67
+ whole subtree it stores and retires the child records it supersedes, in one
68
+ push. Rows no push touches keep the residency they already have — nothing
69
+ rewrites a project that was only pulled.
70
+
71
+ ### Changed
72
+
73
+ - Reject `@distribution(kind: .Packed)` on a List whose `listKind` is
74
+ unordered. An unordered list's membership is the set of live rows carrying
75
+ its id, so its entries occupy no position inside a parent row to be packed
76
+ into.
77
+
78
+ ### Compatibility
79
+
80
+ - Project source format stays 4; the schema contract moves 4.0 to 4.1.
81
+ - The wire and `.neo` workspace state keep storing records in their physical
82
+ form, so merge bases and content hashes are unchanged.
83
+ - A push that edits a value whose member packs now writes the owning row and
84
+ deletes the child's superseded record, where it previously wrote the child
85
+ row. Both plans describe the same logical graph.
86
+
3
87
  ## [0.40.0] - 2026-08-30
4
88
 
5
89
  ### Changed