@neocompose/cli 0.37.0 → 0.38.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,95 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.38.1] - 2026-08-27
4
+
5
+ ### Changed
6
+
7
+ - A stored construction from before the P75 collapse now converges to the
8
+ sparse shape on its next push. Such a row recorded every
9
+ constructor-settled member twice — once as creation data and once as a body
10
+ key — and re-lowering used to preserve that duplication forever. The
11
+ duplicate body keys are now dropped and the construction's provenance is
12
+ stamped explicitly. This is a one-time storage convergence with no change in
13
+ resolved values: each argument row is still named by the creation data that
14
+ already named it, so nothing is stranded, and the authored creation data is
15
+ untouched, so a converged push is not reported as an edit. Rows already in
16
+ the sparse shape are unaffected.
17
+
18
+ ### Fixed
19
+
20
+ - Lower an authored default echo on a fresh row to absence instead of a stored
21
+ override. Spelling a member's declared default verbatim in a new
22
+ initializer — a leaf equal to its declaration, or a bare class construction
23
+ whose members the declaration wholly settles — minted a pending row that
24
+ push verification then rejected as absent from the verified source manifest.
25
+ - Converge a stored inline member default toward the collapsed sparse shape
26
+ instead of re-minting its seed. A pre-collapse stored default that equals
27
+ its declaration reported `create 1 member value seed(s)` on every push of an
28
+ otherwise clean checkout.
29
+ - Keep a compiled delegate action when a re-lowered argument's source code is
30
+ unchanged. Re-lowering emitted the code-only shape over the stored compiled
31
+ closure, so an untouched delegate argument round-tripped as an edit and
32
+ evaluation lost its compiled action until the next server compile.
33
+
34
+ ## [0.38.0] - 2026-08-26
35
+
36
+ ### Added
37
+
38
+ - `neo doctor` audits unprojected value rows. A pulled base row that no emitted
39
+ file projects and that no other record names is read by `neo status` as
40
+ CLI-managed loose state, so no status run will ever mention it however it
41
+ diverges — the blind spot that made the P75 collapse's losses invisible. Each
42
+ orphan root is reported once, with the rows reachable only through it, and
43
+ `--json` carries them under the finding's `repair` entry. The Hello World
44
+ corpus reports 86 such rows.
45
+
46
+ ### Changed
47
+
48
+ - **Breaking:** Unity export schema version is now 28. A structured-leaf field
49
+ override travels under the `~partial` envelope key where it previously
50
+ travelled under `$partial`; that key is the only thing telling a field
51
+ override apart from a whole-leaf record, so an SDK at 27 would silently
52
+ mis-apply the override rather than refuse the export. Authored `new { … }`
53
+ source is unchanged, and stored bodies are rewritten server-side.
54
+ - Constructor arguments no longer emit `@id` pins. A named argument recovers
55
+ its row from the schema key its parameter settles, so the annotation was
56
+ machine identity written into hand-authored constructions — 125 of them in
57
+ the Neowyn corpus. A list entry, whose position recovers nothing, still
58
+ carries its identity.
59
+ - A warm no-op `neo status` on the Neowyn corpus drops from ~25-28s to ~3s:
60
+ resolver documents are memoized across expansions, inheritance indexes and
61
+ merged-schema memos are validated against the snapshot instead of rebuilt,
62
+ the animation validation gate is scoped to what changed, and the
63
+ construction-expression prober caches its negative answers. Phase timings now
64
+ account for the full runtime.
65
+
66
+ ### Fixed
67
+
68
+ - Emit a stored row that derives its content from its member's declared default
69
+ as absence rather than as a bare constructor call. The spelled-out form
70
+ claimed a construction the author never wrote and reported every required
71
+ member the declaration settles as unsettled; a child whose content diverges
72
+ from the default still emits its sparse override.
73
+ - Emit an empty dictionary or ordered-list member default as `= {}` and `= []`.
74
+ Folding the empty container into no initializer at all made the declaration
75
+ read as required-and-unsettled, so every construction of the owning class
76
+ warned `unsettled-required-member`.
77
+ - Preserve the stored shape of a construction pulled from before the P75
78
+ collapse. Re-lowering rewrote a legacy root into the collapsed shape
79
+ unconditionally, so a pull of an untouched corpus reported those roots as
80
+ locally edited and pushing that clean pull was a storage rewrite nobody asked
81
+ for.
82
+ - Recover a constructor argument's structural path from a fully sparse root. A
83
+ row storing no body at all skipped the `constructorArgs` recovery, so the
84
+ next push minted a fresh subtree for an argument that had not changed.
85
+ - Resolve a stored row at a member with a row-backed default by replaying that
86
+ default. Reads replayed the bare constructor while the emitter replayed the
87
+ default, and the disagreement dropped overrides the corpus genuinely holds.
88
+ - Make `neo login`, `neo whoami`, and `neo logout` honor the current
89
+ workspace's `apiBaseUrl`. An explicit `--api` still wins, and commands run
90
+ outside a workspace keep the build default, so login no longer stores a
91
+ credential for a different origin than working-copy commands use.
92
+
3
93
  ## [0.37.0] - 2026-08-24
4
94
 
5
95
  ### Added
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