@neocompose/cli 0.7.2 → 0.7.3

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
@@ -7,6 +7,13 @@
7
7
  - Document the final relation-only world layer-link contract and keep the
8
8
  format-4 Hello World corpus free of the retired value-side binding field.
9
9
 
10
+ ## [0.7.3] - 2026-07-22
11
+
12
+ ### Fixed
13
+
14
+ - Keep sparse member fields sparse during push-time NeoScript recompilation so
15
+ `isReadOnly: false` does not create phantom changes rejected by trusted lowering.
16
+
10
17
  ## [0.7.2] - 2026-07-22
11
18
 
12
19
  ### Fixed
package/dist/neo.mjs CHANGED
@@ -64311,13 +64311,28 @@ function prepareCompleteNeoScriptBodyChanges(workspace, status, schema, options
64311
64311
  if (typeof compiled.id !== "string") continue;
64312
64312
  const explicit = changesById.get(compiled.id);
64313
64313
  if (explicit !== void 0) {
64314
- explicit.nextData = compiled;
64314
+ if (explicit.nextData === void 0) {
64315
+ throw new Error(
64316
+ `Cannot attach compiled NeoScript for deleted member "${compiled.id}".`
64317
+ );
64318
+ }
64319
+ explicit.nextData = mergeCompiledNeoScriptBody(
64320
+ explicit.nextData,
64321
+ compiled
64322
+ );
64315
64323
  continue;
64316
64324
  }
64317
64325
  if (!completeSweep) continue;
64318
64326
  const key = recordStateKey("member", compiled.id);
64319
64327
  const base = workspace.state.records[key];
64320
- if (base === void 0 || canonicallyEqual(base.data, compiled)) continue;
64328
+ if (base === void 0) continue;
64329
+ if (!isObjectRecord2(base.data)) {
64330
+ throw new Error(
64331
+ `Cannot attach compiled NeoScript for member "${compiled.id}": its base record is not an object.`
64332
+ );
64333
+ }
64334
+ const nextData = mergeCompiledNeoScriptBody(base.data, compiled);
64335
+ if (canonicallyEqual(base.data, nextData)) continue;
64321
64336
  const reconstructed3 = status.reconstructed.get(key);
64322
64337
  if (reconstructed3 === void 0) {
64323
64338
  throw new Error(
@@ -64329,7 +64344,7 @@ function prepareCompleteNeoScriptBodyChanges(workspace, status, schema, options
64329
64344
  recordKind: "member",
64330
64345
  recordId: compiled.id,
64331
64346
  file: reconstructed3.file,
64332
- nextData: compiled,
64347
+ nextData,
64333
64348
  baseData: base.data,
64334
64349
  baseContentHash: base.contentHash,
64335
64350
  casBaseHash: base.conflictServerHash ?? base.contentHash
@@ -64338,6 +64353,18 @@ function prepareCompleteNeoScriptBodyChanges(workspace, status, schema, options
64338
64353
  changesById.set(compiled.id, cascadeChange);
64339
64354
  }
64340
64355
  }
64356
+ function mergeCompiledNeoScriptBody(persisted, compiled) {
64357
+ const next = { ...persisted };
64358
+ const fields = compiled.kind === 10 ? ["getter", "setter"] : ["action"];
64359
+ for (const field of fields) {
64360
+ if (compiled[field] === void 0) {
64361
+ delete next[field];
64362
+ } else {
64363
+ next[field] = compiled[field];
64364
+ }
64365
+ }
64366
+ return next;
64367
+ }
64341
64368
  function workspaceChangesRequireCompleteBodySweep(changes) {
64342
64369
  for (const change of changes) {
64343
64370
  if (change.recordKind === "class" || change.recordKind === "enum" || change.recordKind === "interface") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "description": "Neo Compose native project-source CLI with bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",