@neocompose/cli 0.21.5 → 0.22.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.21.5",
3
+ "version": "0.22.0",
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.21.5 -->
12
+ <!-- reviewed-through-cli: 0.22.0 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -30,7 +30,7 @@ Those are not part of format 4.
30
30
  existed before the task began.
31
31
  4. Run `neo dialogue dryrun <ref>` after dialogue changes.
32
32
  5. Run `neo push --dry-run` before every real push. It performs the full local
33
- bundle, ID-assignment, transport-shape, hash, and repeat-verification path,
33
+ source emission, ID-assignment, transport-shape, hash, and repeat-verification path,
34
34
  then rehearses the server's preparation phase — schema-commit
35
35
  materialization and whole-graph validation — against the pulled document,
36
36
  without prompting, uploading, committing, or rewriting the checkout.
@@ -51,7 +51,7 @@ opaque JSON or guessed syntax.
51
51
  - Preserve existing `@id` annotations through rename, reorder, and file moves.
52
52
  - Do not add a second `@id` to a root or static member initializer. The member
53
53
  ID owns that stored binding. Nested class/list rows still carry their own IDs.
54
- - Treat `.neo/` as private state and the source bundle as the authorable input.
54
+ - Treat `.neo/` as private state and tracked Neo source as the authorable input.
55
55
  - Never seek a force-CAS bypass. Pull, resolve, review, and retry.
56
56
 
57
57
  ## Set up a format-4 workspace
@@ -191,8 +191,11 @@ Conflict source deliberately fails compilation. Edit the desired final source,
191
191
  or use `neo resolve --mine|--theirs` as a whole-side convenience. Then pull,
192
192
  review, dry-run, and push again.
193
193
 
194
- `neo push` sends the complete hashed source bundle for trusted server
195
- recompilation but commits only the semantic diff under CAS. On
194
+ `neo push` sends the authenticated semantic diff plus a deterministic source
195
+ hash, while the server recompiles the changed NeoScript bodies and
196
+ schema-affected callers and commits only that diff under CAS. Use
197
+ `neo push --dry-run` for the complete source-to-record round-trip check; a
198
+ normal push deliberately does not upload or re-lower the whole source tree. On
196
199
  `base-hash-conflict`, pull and resolve. On `version-bump-required`, inspect the
197
200
  classification and pass `neo push --accept-bump` only when intended.
198
201
 
@@ -60,9 +60,14 @@ LSP state. Preserve diagnostics, completion, hover, signatures, definition,
60
60
  references, rename, symbols, semantic tokens, code actions, and formatting
61
61
  parity for `.neo` and `.neoflow`.
62
62
 
63
- Keep trusted server recompilation and verification independent of client
64
- outputs. The CLI emits a complete source bundle; client-generated IR, structural
65
- rows, hashes, storage stamps, and pending IDs are not trusted.
63
+ Keep trusted server validation independent of client-generated IR. The CLI
64
+ sends the authenticated semantic diff and a deterministic source identity;
65
+ the server recompiles changed NeoScript bodies and callers affected by
66
+ schema-contract changes. Structural rows, hashes, storage stamps, identities,
67
+ materialization, and CAS bases remain server-validated; unrelated source files
68
+ are not uploaded or recompiled on every push. The explicit trade-off is that a
69
+ CLI lowering mismatch on a normal push is exposed by the next canonical pull;
70
+ `neo push --dry-run` remains the complete source-to-record rehearsal.
66
71
 
67
72
  ## Package and release maintenance
68
73
 
@@ -73,7 +78,7 @@ wrappers.
73
78
  The marker near the top of `SKILL.md` must exactly match the package version:
74
79
 
75
80
  ```html
76
- <!-- reviewed-through-cli: 0.21.5 -->
81
+ <!-- reviewed-through-cli: 0.22.0 -->
77
82
  ```
78
83
 
79
84
  The quoted version above is checked too, so this instruction cannot go stale
@@ -22,6 +22,7 @@ neo diff
22
22
  neo dialogue dryrun <dialogue-ref>
23
23
  neo push --dry-run
24
24
  neo push
25
+ neo push --dry-run --force-recompile
25
26
  ```
26
27
 
27
28
  Use `neo pull --regenerate-source-names` to refresh readable naming while
@@ -29,23 +30,42 @@ retaining normal merge behavior. Use `--reset` to regenerate canonical source
29
30
  and managed binaries. Use `--force` only to discard local edits for the server
30
31
  version.
31
32
 
32
- Treat `neo push --dry-run` as a full local commit rehearsal: bundle emission,
33
- pending-ID assignment on a clone, transport shapes, hashes, and repeat
33
+ Treat `neo push --dry-run` as a full local commit rehearsal: source emission,
34
+ in-memory pending-ID assignment, transport shapes, hashes, and repeat
34
35
  verification all run. It also runs the server's preparation phase locally —
35
36
  schema-commit materialization, seeded structural rows, and whole-graph
36
37
  validation — so a rejection that used to cost a real push and return an opaque
37
38
  `preparation-failed` now reports before anything is sent. It does not prompt,
38
39
  upload, commit, or rewrite source.
39
40
 
40
- Interactive pushes show `Preparing push…` before workspace discovery,
41
- lowering, and compilation begin. JSON and non-TTY output remain structured and
42
- do not emit that terminal-only spinner.
41
+ Normal preparation follows typed compiler dependencies and recompiles only
42
+ bodies affected by changed declarations. Use `--force-recompile` with either a
43
+ dry run or a real push only when diagnosing stale derived IR: it retains the
44
+ exhaustive project-wide body sweep and is intentionally slower.
45
+
46
+ Interactive pushes report the active preparation phase before workspace
47
+ discovery, lowering, compilation, source hashing, and validation begin.
48
+ A normal push prepares that transport once before confirmation and reuses it
49
+ after confirmation; it does not run a second local preparation pass. JSON and
50
+ non-TTY output remain structured and do not emit that terminal-only spinner.
43
51
 
44
52
  A clean dry-run does not promise a clean push. The workspace holds its
45
53
  last-pulled state, so everything that grades the live head is still server-only:
46
- re-verification of the uploaded bundle bytes, project-file staging, the
47
- snapshot-id and content-head cross-check, admission classification, chunk
48
- planning, and finalization. Pull again before pushing if time has passed.
54
+ project-file staging, authoritative changed/affected NeoScript compilation,
55
+ record/identity/materialization validation, the snapshot-id and content-head
56
+ cross-check, admission classification, chunk planning, and finalization. The
57
+ server does not recompile every unchanged source file merely to prove that an
58
+ authenticated developer used the CLI. Pull again before pushing if time has
59
+ passed.
60
+
61
+ Durable preparation is selected from the semantic record workload, not the
62
+ size of the project-wide source identity. Its storage artifact carries one
63
+ copy of the authored transaction, and resumable staging reads one plan per
64
+ bounded batch while preserving an atomic write boundary per physical chunk.
65
+ The complete source stays local: normal push sends its deterministic hash for
66
+ reconnect identity, not the source bytes. A lowering mismatch can
67
+ therefore surface on the next canonical pull; dry-run is the opt-in full
68
+ source-to-record proof.
49
69
 
50
70
  One accepted push atomically commits records, main-locale text, stored bindings,
51
71
  and staged file metadata under CAS. Pending durable IDs and source rewrites