@neocompose/cli 0.23.1 → 0.24.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.23.1",
3
+ "version": "0.24.0",
4
4
  "description": "Neo Compose native project-source CLI with bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -35,7 +35,8 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@inquirer/prompts": "^8.5.2",
38
- "convex": "^1.40.0"
38
+ "convex": "^1.40.0",
39
+ "ignore": "^7.0.6"
39
40
  },
40
41
  "devDependencies": {
41
42
  "esbuild": "^0.28.1",
@@ -2,14 +2,14 @@
2
2
  name: neocompose-cli
3
3
  description: >-
4
4
  Edit, validate, and synchronize Neo Compose format-4 projects with the `neo`
5
- CLI. Use when working in a `neo/` checkout or with `.neo`/`.neoflow` source:
5
+ CLI. Use when working in a `neo/` checkout or with `.neo`/`.neoflow`/`.spec.neo` source:
6
6
  schema declarations, constructors, values and references, world objects and
7
7
  animation, dialogue, NeoScript, localization, migrations, managed image or
8
8
  audio files, branches and releases, or batch repair. Run `neo` from
9
9
  `@neocompose/cli` or `node cli/bin/neo.mjs` in the neo-compose repository.
10
10
  ---
11
11
 
12
- <!-- reviewed-through-cli: 0.23.1 -->
12
+ <!-- reviewed-through-cli: 0.24.0 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -24,11 +24,12 @@ Those are not part of format 4.
24
24
  ## Follow the safe workflow
25
25
 
26
26
  1. Run `neo pull` before editing. Pull again before pushing if time has passed.
27
- 2. Edit tracked `.neo`, `.neoflow`, and managed binary files only. Never edit
27
+ 2. Edit tracked `.neo`, `.neoflow`, `.spec.neo`, and managed binary files only. Never edit
28
28
  `.neo/state.json`, analysis caches, or `.neo/conflicts` as source.
29
29
  3. Run `neo status` and `neo diff`. Review every change, including changes that
30
30
  existed before the task began.
31
- 4. Run `neo dialogue dryrun <ref>` after dialogue changes.
31
+ 4. Run `neo test` after NeoScript changes and `neo dialogue dryrun <ref>` after
32
+ dialogue changes.
32
33
  5. Run `neo push --dry-run` before every real push. It performs the full local
33
34
  source emission, ID-assignment, transport-shape, hash, and repeat-verification path,
34
35
  then rehearses the server's preparation phase — schema-commit
@@ -100,10 +101,13 @@ neo/
100
101
  DialogueGroups/
101
102
  Dialogues/*.neoflow
102
103
  Migrations/*.neo
104
+ **/*.spec.neo
103
105
  .neo/{state.json,conflicts/}
104
106
  ```
105
107
 
106
- All non-hidden `.neo`, `.neoflow`, and supported managed binaries are tracked.
108
+ Production `.neo`/`.neoflow` files and supported managed binaries are tracked.
109
+ Colocated `.spec.neo` files are test-only and never enter status, source hashes,
110
+ pull/reset, or push.
107
111
  Normal pull preserves declaration placement and spelling by stable ID when it
108
112
  can. Force/reset may regroup source into the canonical layout.
109
113
 
@@ -41,8 +41,10 @@ Read the relevant specs in full:
41
41
  - [P50 loops](https://github.com/ryanbliss/neo-compose-specs/blob/main/new-features/p50-neoscript-for-and-foreach-loops.md)
42
42
  - [P51 switch](https://github.com/ryanbliss/neo-compose-specs/blob/main/new-features/p51-neoscript-switch-statements.md)
43
43
  - [P52 try/catch](https://github.com/ryanbliss/neo-compose-specs/blob/main/new-features/p52-neoscript-try-catch-blocks.md)
44
+ - [P64 NeoScript unit testing and push hooks](https://github.com/ryanbliss/neo-compose-specs/blob/main/new-features/p64-neoscript-unit-testing-and-push-hooks.md)
44
45
 
45
- P38–P44 and P47–P51 are implemented. P45 remains deliberately deferred; do not
46
+ P38–P44, P47–P52, and the initial P64 test/push-hook vertical slice are
47
+ implemented. P45 remains deliberately deferred; do not
46
48
  build or teach runtime-child provenance. P46 is a hardening proposal, not an
47
49
  authoring capability. P52's document header still says proposed, but try/catch
48
50
  shipped in CLI 0.18; implementation and parity tests take precedence over that
@@ -78,7 +80,7 @@ wrappers.
78
80
  The marker near the top of `SKILL.md` must exactly match the package version:
79
81
 
80
82
  ```html
81
- <!-- reviewed-through-cli: 0.23.1 -->
83
+ <!-- reviewed-through-cli: 0.24.0 -->
82
84
  ```
83
85
 
84
86
  The quoted version above is checked too, so this instruction cannot go stale
@@ -118,6 +118,15 @@ Removing an explicitly materialized field from an existing initializer requests
118
118
  a reset through the current default; require that change to appear in
119
119
  `neo diff`.
120
120
 
121
+ Editing an initializer on an already-materialized instance updates the stored
122
+ rows in place: the plan carries leaf updates with stable sub-row ids, never a
123
+ delete-and-recreate, and never strips the instance back to an unconstructed
124
+ value. A construction the stored rows cannot be reprojected onto — one that
125
+ changes durable constructor arguments, swaps the class, or predates a new
126
+ constructor parameter — fails with `construction-arguments-conflict` instead of
127
+ lowering. Edit the instance's members, or delete and recreate the value with the
128
+ new construction.
129
+
121
130
  Write main-locale text directly in localizable string initializers. Pull/lower
122
131
  preserves other locales, comments, statuses, archive state, and unrelated
123
132
  localized-text links. Do not author localized-text IDs in place of prose.