@neocompose/cli 0.7.1 → 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,20 @@
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
+
17
+ ## [0.7.2] - 2026-07-22
18
+
19
+ ### Fixed
20
+
21
+ - Preserve declaration-local `isReadOnly` on every override when an entire
22
+ inheritance chain converts to read-only in one source push.
23
+
10
24
  ## [0.7.1] - 2026-07-22
11
25
 
12
26
  ### Added
package/dist/neo.mjs CHANGED
@@ -22650,6 +22650,7 @@ function memberToDocument(member, baseData3, parentMember) {
22650
22650
  const normalizedBaseData = normalizeDocumentFields("member", baseData3);
22651
22651
  for (const [field, value] of Object.entries(fields)) {
22652
22652
  if (MEMBER_IDENTITY_FIELDS.has(field)) continue;
22653
+ if (field === "isReadOnly") continue;
22653
22654
  if (Object.prototype.hasOwnProperty.call(normalizedBaseData, field))
22654
22655
  continue;
22655
22656
  if (!Object.prototype.hasOwnProperty.call(inheritedFields, field)) continue;
@@ -64310,13 +64311,28 @@ function prepareCompleteNeoScriptBodyChanges(workspace, status, schema, options
64310
64311
  if (typeof compiled.id !== "string") continue;
64311
64312
  const explicit = changesById.get(compiled.id);
64312
64313
  if (explicit !== void 0) {
64313
- 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
+ );
64314
64323
  continue;
64315
64324
  }
64316
64325
  if (!completeSweep) continue;
64317
64326
  const key = recordStateKey("member", compiled.id);
64318
64327
  const base = workspace.state.records[key];
64319
- 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;
64320
64336
  const reconstructed3 = status.reconstructed.get(key);
64321
64337
  if (reconstructed3 === void 0) {
64322
64338
  throw new Error(
@@ -64328,7 +64344,7 @@ function prepareCompleteNeoScriptBodyChanges(workspace, status, schema, options
64328
64344
  recordKind: "member",
64329
64345
  recordId: compiled.id,
64330
64346
  file: reconstructed3.file,
64331
- nextData: compiled,
64347
+ nextData,
64332
64348
  baseData: base.data,
64333
64349
  baseContentHash: base.contentHash,
64334
64350
  casBaseHash: base.conflictServerHash ?? base.contentHash
@@ -64337,6 +64353,18 @@ function prepareCompleteNeoScriptBodyChanges(workspace, status, schema, options
64337
64353
  changesById.set(compiled.id, cascadeChange);
64338
64354
  }
64339
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
+ }
64340
64368
  function workspaceChangesRequireCompleteBodySweep(changes) {
64341
64369
  for (const change of changes) {
64342
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.1",
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",