@neocompose/cli 0.58.3 → 0.59.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.58.3",
3
+ "version": "0.59.1",
4
4
  "description": "Neo Compose native project-source CLI with bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -9,7 +9,7 @@ description: >-
9
9
  `@neocompose/cli` or `node cli/bin/neo.mjs` in the neo-compose repository.
10
10
  ---
11
11
 
12
- <!-- reviewed-through-cli: 0.58.3 -->
12
+ <!-- reviewed-through-cli: 0.59.1 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -38,8 +38,8 @@ Those are not part of format 4.
38
38
  or push merely to obtain compiled initializer bodies.
39
39
  5. Run `neo push --dry-run` before every real push. It performs the full local
40
40
  source emission, ID-assignment, transport-shape, hash, and repeat-verification path,
41
- then rehearses the server's preparation phase — schema-commit
42
- materialization and whole-graph validation — against the pulled document,
41
+ then runs the preparation a real push ships — compilation, schema-commit
42
+ materialization, and whole-graph validation — against the pulled document,
43
43
  without prompting, uploading, committing, or rewriting the checkout. Pull
44
44
  once with the installed CLI so the workspace carries compatible
45
45
  derived-edge extractor metadata. Pending getters and functions compile before
@@ -258,9 +258,10 @@ a pull conflict by itself; if an older CLI retained such a metadata-only
258
258
  conflict without writing source markers, either side settles it the same way
259
259
  while preserving any real local source edit.
260
260
 
261
- `neo push` sends the authenticated semantic diff plus a deterministic source
262
- hash, while the server recompiles the changed NeoScript bodies and
263
- schema-affected callers and commits only that diff under CAS. Use
261
+ `neo push` prepares the commit locally, recompiling changed NeoScript bodies
262
+ and schema-affected callers, and the server commits the prepared changes under
263
+ CAS. If another commit lands after your pull, the push fails as
264
+ `non-fast-forward`: pull, then push again. Use
264
265
  `neo push --dry-run` for the complete source-to-record round-trip check; a
265
266
  normal push deliberately does not upload or re-lower the whole source tree. On
266
267
  `base-hash-conflict`, pull and resolve. On `version-bump-required`, inspect the
@@ -72,14 +72,18 @@ LSP state. Preserve diagnostics, completion, hover, signatures, definition,
72
72
  references, rename, symbols, semantic tokens, code actions, and formatting
73
73
  parity for `.neo` and `.neoflow`.
74
74
 
75
- Keep trusted server validation independent of client-generated IR. The CLI
76
- sends the authenticated semantic diff and a deterministic source identity;
77
- the server recompiles changed NeoScript bodies and callers affected by
78
- schema-contract changes. Structural rows, hashes, storage stamps, identities,
79
- materialization, and CAS bases remain server-validated; unrelated source files
80
- are not uploaded or recompiled on every push. The explicit trade-off is that a
81
- CLI lowering mismatch on a normal push is exposed by the next canonical pull;
82
- `neo push --dry-run` remains the complete source-to-record rehearsal.
75
+ The CLI prepares every push with the server's own preparation code: it
76
+ compiles changed NeoScript bodies and callers affected by schema-contract
77
+ changes, materializes values, and validates the whole graph against the pulled
78
+ head. The server accepts that preparation only from a CLI on its NeoScript
79
+ compiler revision and re-checks the head, authorization, row shapes, and CAS
80
+ bases. A modified CLI can therefore write bad rows to a project its user may
81
+ already write; keep preparation in shared `src/database` code rather than
82
+ forking it in the CLI. The server still verifies a push's uploaded
83
+ project-file bytes, and web editor commits still prepare on the server.
84
+ Unrelated source files are not uploaded or recompiled on every push. A CLI lowering mismatch on a normal push is exposed by the next
85
+ canonical pull; `neo push --dry-run` remains the complete source-to-record
86
+ rehearsal.
83
87
 
84
88
  A committed push result is journaled in `.neo/state.json` before source
85
89
  projection. If projection fails, `neo pull` consumes that result and preserves
@@ -97,7 +101,7 @@ wrappers.
97
101
  The marker near the top of `SKILL.md` must exactly match the package version:
98
102
 
99
103
  ```html
100
- <!-- reviewed-through-cli: 0.58.3 -->
104
+ <!-- reviewed-through-cli: 0.59.1 -->
101
105
  ```
102
106
 
103
107
  The quoted version above is checked too, so this instruction cannot go stale
@@ -73,11 +73,10 @@ restarts. Upgrade the CLI together with the P83 server read protocol.
73
73
 
74
74
  Treat `neo push --dry-run` as a full local commit rehearsal: source emission,
75
75
  in-memory pending-ID assignment, transport shapes, hashes, and repeat
76
- verification all run. It also runs the server's preparation phase locally —
77
- schema-commit materialization, seeded structural rows, and whole-graph
78
- validation — so a rejection that used to cost a real push and return an opaque
79
- `preparation-failed` now reports before anything is sent. It does not prompt,
80
- upload, commit, or rewrite source.
76
+ verification all run. It also runs the preparation a real push ships —
77
+ compilation, schema-commit materialization, seeded structural rows, and
78
+ whole-graph validation — so a rejection reports before anything is sent. It
79
+ does not prompt, upload, commit, or rewrite source.
81
80
 
82
81
  Dry-run also compares the CLI's derived-edge extractor with the server version
83
82
  saved by the last pull. Run `neo pull` after upgrading the CLI or when an older
@@ -90,8 +89,10 @@ dry run or a real push only when diagnosing stale derived IR: it retains the
90
89
  exhaustive project-wide body sweep and is intentionally slower.
91
90
 
92
91
  Changed member bodies and migration bodies share one schema projection and its
93
- indexes throughout push preparation. Each changed member body is compiled once,
94
- so a batch of scripted changes does not rebuild the whole schema for every body.
92
+ indexes throughout push preparation, so a batch of scripted changes does not
93
+ rebuild the whole schema for every body. Each changed body compiles once for
94
+ local evaluation and once more, against minted ids, in the preparation the push
95
+ ships.
95
96
 
96
97
  Interactive status, diff, pull, and test commands report workspace loading and
97
98
  preparation phases. Spinners continue animating during synchronous compilation;
@@ -105,17 +106,14 @@ after confirmation; it does not run a second local preparation pass. JSON and
105
106
  non-TTY output remain structured and do not emit that terminal-only spinner.
106
107
 
107
108
  A clean dry-run does not promise a clean push. The workspace holds its
108
- last-pulled state, so everything that grades the live head is still server-only:
109
- project-file staging, authoritative changed/affected NeoScript compilation,
110
- record/identity/materialization validation, the snapshot-id and content-head
111
- cross-check, admission classification, chunk planning, and finalization. The
112
- server does not recompile every unchanged source file merely to prove that an
113
- authenticated developer used the CLI. Pull again before pushing if time has
114
- passed.
109
+ last-pulled state, so the server still grades the live head: the project-head
110
+ check, per-change CAS bases, authorization, row shapes, project-file staging,
111
+ admission, chunk planning, and finalization. A push whose head moved fails as
112
+ `non-fast-forward`. Pull again before pushing if time has passed.
115
113
 
116
114
  Durable preparation is selected from the semantic record workload, not the
117
115
  size of the project-wide source identity. Its storage artifact carries one
118
- copy of the authored transaction, and resumable staging reads one plan per
116
+ copy of the prepared transaction, and resumable staging reads one plan per
119
117
  bounded batch while preserving an atomic write boundary per physical chunk.
120
118
  The complete source stays local. Normal push hashes the exact authored source
121
119
  inputs already read during preparation, including file paths and formatting,