@neocompose/cli 0.36.13 → 0.38.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,93 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.38.0] - 2026-08-26
4
+
5
+ ### Added
6
+
7
+ - `neo doctor` audits unprojected value rows. A pulled base row that no emitted
8
+ file projects and that no other record names is read by `neo status` as
9
+ CLI-managed loose state, so no status run will ever mention it however it
10
+ diverges — the blind spot that made the P75 collapse's losses invisible. Each
11
+ orphan root is reported once, with the rows reachable only through it, and
12
+ `--json` carries them under the finding's `repair` entry. The Hello World
13
+ corpus reports 86 such rows.
14
+
15
+ ### Changed
16
+
17
+ - **Breaking:** Unity export schema version is now 28. A structured-leaf field
18
+ override travels under the `~partial` envelope key where it previously
19
+ travelled under `$partial`; that key is the only thing telling a field
20
+ override apart from a whole-leaf record, so an SDK at 27 would silently
21
+ mis-apply the override rather than refuse the export. Authored `new { … }`
22
+ source is unchanged, and stored bodies are rewritten server-side.
23
+ - Constructor arguments no longer emit `@id` pins. A named argument recovers
24
+ its row from the schema key its parameter settles, so the annotation was
25
+ machine identity written into hand-authored constructions — 125 of them in
26
+ the Neowyn corpus. A list entry, whose position recovers nothing, still
27
+ carries its identity.
28
+ - A warm no-op `neo status` on the Neowyn corpus drops from ~25-28s to ~3s:
29
+ resolver documents are memoized across expansions, inheritance indexes and
30
+ merged-schema memos are validated against the snapshot instead of rebuilt,
31
+ the animation validation gate is scoped to what changed, and the
32
+ construction-expression prober caches its negative answers. Phase timings now
33
+ account for the full runtime.
34
+
35
+ ### Fixed
36
+
37
+ - Emit a stored row that derives its content from its member's declared default
38
+ as absence rather than as a bare constructor call. The spelled-out form
39
+ claimed a construction the author never wrote and reported every required
40
+ member the declaration settles as unsettled; a child whose content diverges
41
+ from the default still emits its sparse override.
42
+ - Emit an empty dictionary or ordered-list member default as `= {}` and `= []`.
43
+ Folding the empty container into no initializer at all made the declaration
44
+ read as required-and-unsettled, so every construction of the owning class
45
+ warned `unsettled-required-member`.
46
+ - Preserve the stored shape of a construction pulled from before the P75
47
+ collapse. Re-lowering rewrote a legacy root into the collapsed shape
48
+ unconditionally, so a pull of an untouched corpus reported those roots as
49
+ locally edited and pushing that clean pull was a storage rewrite nobody asked
50
+ for.
51
+ - Recover a constructor argument's structural path from a fully sparse root. A
52
+ row storing no body at all skipped the `constructorArgs` recovery, so the
53
+ next push minted a fresh subtree for an argument that had not changed.
54
+ - Resolve a stored row at a member with a row-backed default by replaying that
55
+ default. Reads replayed the bare constructor while the emitter replayed the
56
+ default, and the disagreement dropped overrides the corpus genuinely holds.
57
+ - Make `neo login`, `neo whoami`, and `neo logout` honor the current
58
+ workspace's `apiBaseUrl`. An explicit `--api` still wins, and commands run
59
+ outside a workspace keep the build default, so login no longer stores a
60
+ credential for a different origin than working-copy commands use.
61
+
62
+ ## [0.37.0] - 2026-08-24
63
+
64
+ ### Added
65
+
66
+ - Store class instances sparsely (P75). A pushed construction persists its
67
+ root with the recorded constructor recipe and only the authored overrides;
68
+ omitted members resolve virtually from the class source and track later
69
+ default edits until overridden. Storage schema advances to 27.
70
+ - Store forwarding constructors. A subclass that forwards its parameter to a
71
+ base constructor (`Child(seed) : Base(bank: seed)`) now lowers through the
72
+ base's projection instead of being refused as settling no member.
73
+
74
+ ### Fixed
75
+
76
+ - Carry construction provenance through push. The pending-id seed rewrite
77
+ and the dry-run verifier both dropped the constructor recipe, so every
78
+ pushed construction materialized as a full eager default tree server-side.
79
+ - Let `neo push --dry-run` accept source-authored constructions. Derived
80
+ virtual-value assignments now re-derive from their instance root instead
81
+ of failing the UUID shape gate, and seed mismatches name the first
82
+ differing path.
83
+ - Round-trip override removal. Deleting an override line from an initializer
84
+ now plans the coherent root-update/child-delete pair and no longer fails
85
+ dry-run verification with "Stored member value … was not pulled".
86
+ - Stop the post-push source rewrite corrupting a file that declares several
87
+ types. The preserved authored file no longer shadows the canonical
88
+ one-file-per-declaration split, which duplicated every non-first
89
+ declaration with an already-used stable ID.
90
+
3
91
  ## [0.36.13] - 2026-08-22
4
92
 
5
93
  ### Fixed
package/README.md CHANGED
@@ -417,8 +417,8 @@ authorization boundary.
417
417
  | Command | Purpose |
418
418
  | ----------------------------------------------------- | ------------------------------------------------------------------------- |
419
419
  | `--version` | Print the installed CLI package version. |
420
- | `login` | Authenticate the selected profile. |
421
- | `whoami` | Inspect the selected profile. |
420
+ | `login [--api <url>]` | Authenticate the selected profile. |
421
+ | `whoami [--api <url>]` | Inspect the selected profile. |
422
422
  | `logout [--api <url>]` | Delete the stored credential for one API origin and revoke its session. |
423
423
  | `init --project <id> [--version <id>]` | Create a format-4 working copy and perform its first reset pull. |
424
424
  | `doctor` | Validate format/compiler/editor/source/file contracts; no .NET discovery. |
@@ -445,6 +445,11 @@ tracked native source and `neo push`. Localization commands can mutate
445
445
  authoritative localization records that `.neo` does not fully represent; run
446
446
  `neo pull` immediately afterward before further source edits or push.
447
447
 
448
+ `login`, `whoami`, and `logout` use the current workspace's `apiBaseUrl` when
449
+ run beneath a `neo.json`. An explicit `--api` takes priority. Outside a
450
+ workspace, they use the CLI build's default API origin. Login prints the
451
+ selected origin before it requests or stores a credential.
452
+
448
453
  Tokens use the OS credential store when available and a protected local file
449
454
  only as fallback. CI can use `NEO_COMPOSE_TOKEN` or `--token-stdin`. The
450
455
  editor profile cannot publish releases; server authorization remains the