@neocompose/cli 0.21.4 → 0.21.5

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
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.21.5] - 2026-08-03
4
+
5
+ ### Fixed
6
+
7
+ - Non-empty `neo push` rehearsals compile only the code-only member defaults
8
+ actually reached by canonical constructor replay, so stored animation graphs
9
+ no longer fail on dependencies such as `Down` that correctly omit derived IR
10
+ from the trusted source bundle.
11
+
3
12
  ## [0.21.4] - 2026-08-03
4
13
 
5
14
  ### Fixed
package/dist/neo.mjs CHANGED
@@ -55412,7 +55412,7 @@ var init_constructor_argument_ownership = __esm({
55412
55412
  });
55413
55413
 
55414
55414
  // ../src/view-models/neoscript-evaluator/NSGetterRuntimeError.ts
55415
- var NSGetterRuntimeError;
55415
+ var NSGetterRuntimeError, UncompiledInitializerRuntimeError;
55416
55416
  var init_NSGetterRuntimeError = __esm({
55417
55417
  "../src/view-models/neoscript-evaluator/NSGetterRuntimeError.ts"() {
55418
55418
  "use strict";
@@ -55422,6 +55422,16 @@ var init_NSGetterRuntimeError = __esm({
55422
55422
  this.name = "NSGetterRuntimeError";
55423
55423
  }
55424
55424
  };
55425
+ UncompiledInitializerRuntimeError = class extends NSGetterRuntimeError {
55426
+ constructor(memberId, memberName) {
55427
+ super(
55428
+ `Initializer for '${memberName}' has no compiled body; push the project so the server compiles it.`
55429
+ );
55430
+ this.memberId = memberId;
55431
+ this.name = "UncompiledInitializerRuntimeError";
55432
+ }
55433
+ memberId;
55434
+ };
55425
55435
  }
55426
55436
  });
55427
55437
 
@@ -56344,7 +56354,7 @@ var init_project2 = __esm({
56344
56354
 
56345
56355
  // ../src/view-models/neoscript-evaluator/evaluateNSGetter.ts
56346
56356
  function isCatchableNSRuntimeError(error) {
56347
- return error instanceof NSGetterRuntimeError && !(error instanceof NonCatchableNSGetterRuntimeError);
56357
+ return error instanceof NSGetterRuntimeError && !(error instanceof UncompiledInitializerRuntimeError) && !(error instanceof NonCatchableNSGetterRuntimeError);
56348
56358
  }
56349
56359
  function makeEvaluatorLookups(members, values, options = {}) {
56350
56360
  const attrMap = /* @__PURE__ */ new Map();
@@ -61094,8 +61104,10 @@ function evaluateInitializerInContext(init, member, ctx, createdValues, argument
61094
61104
  ctx.__constructedArgumentsByValue ??= /* @__PURE__ */ new WeakMap();
61095
61105
  const compiled = init.compiled;
61096
61106
  if (compiled === void 0) {
61097
- throw new NSGetterRuntimeError(
61098
- `Initializer for '${member.name}' has no compiled body; push the project so the server compiles it.`
61107
+ const memberId = Reflect.get(member, "id");
61108
+ throw new UncompiledInitializerRuntimeError(
61109
+ typeof memberId === "string" ? memberId : null,
61110
+ member.name
61099
61111
  );
61100
61112
  }
61101
61113
  const closeFrame = pushConstructionFrame(ctx, `${member.name} initializer`);
@@ -62525,8 +62537,9 @@ function buildInitializerRootValue(document) {
62525
62537
  function evaluateMemberInitializer(args) {
62526
62538
  const compiled = args.init.compiled;
62527
62539
  if (compiled === void 0) {
62528
- throw new NSGetterRuntimeError(
62529
- `Initializer for '${args.member.name}' has no compiled body; push the project so the server compiles it.`
62540
+ throw new UncompiledInitializerRuntimeError(
62541
+ typeof Reflect.get(args.member, "id") === "string" ? Reflect.get(args.member, "id") : null,
62542
+ args.member.name
62530
62543
  );
62531
62544
  }
62532
62545
  const ctx = {
@@ -75432,24 +75445,7 @@ var init_server_preparation_preflight = __esm({
75432
75445
  function replayStoredConstructionV4(args) {
75433
75446
  const document = args.document ?? readPulledProjectDocumentV4(args.records);
75434
75447
  if (args.compileDocumentBodies === true) {
75435
- const compileArgs = {
75436
- project: document.project,
75437
- projectFiles: document.projectFiles,
75438
- members: document.members,
75439
- classes: document.classes,
75440
- enums: document.enums,
75441
- interfaces: document.interfaces,
75442
- constructors: document.constructors ?? []
75443
- };
75444
- for (const constructor2 of compileArgs.constructors) {
75445
- compileConstructorRecord({ ...compileArgs, constructor: constructor2 });
75446
- }
75447
- for (const member of compileArgs.members) {
75448
- const thisClass = compileArgs.classes.find(
75449
- (schemaClass2) => Object.values(schemaClass2.schema).includes(member.id)
75450
- ) ?? null;
75451
- compileAuthoredMemberBodies({ ...compileArgs, member, thisClass });
75452
- }
75448
+ compilePulledProjectDocumentBodiesV4(document);
75453
75449
  }
75454
75450
  const root = document.values.find((value) => value.id === args.valueId);
75455
75451
  if (root === void 0) {
@@ -75508,13 +75504,26 @@ function replayStoredConstructionV4(args) {
75508
75504
  );
75509
75505
  }
75510
75506
  if (args.evaluate === false) return /* @__PURE__ */ new Map();
75511
- const materialized = materializeInitializerValue({
75512
- document,
75513
- // Constructor-only rows have no structural member owner. Use the same
75514
- // explicit typed descriptor for evaluation that compiled the replay.
75515
- member: compileMember,
75516
- row: candidate
75517
- });
75507
+ const compiledDependencies = /* @__PURE__ */ new Set();
75508
+ let materialized;
75509
+ for (; ; ) {
75510
+ try {
75511
+ materialized = materializeInitializerValue({
75512
+ document,
75513
+ // Constructor-only rows have no structural member owner. Use the same
75514
+ // explicit typed descriptor for evaluation that compiled the replay.
75515
+ member: compileMember,
75516
+ row: candidate
75517
+ });
75518
+ break;
75519
+ } catch (error) {
75520
+ if (!(error instanceof UncompiledInitializerRuntimeError) || error.memberId === null || compiledDependencies.has(error.memberId)) {
75521
+ throw error;
75522
+ }
75523
+ compilePulledMemberInitializerBodyV4(document, error.memberId);
75524
+ compiledDependencies.add(error.memberId);
75525
+ }
75526
+ }
75518
75527
  return new Map(
75519
75528
  [materialized.root, ...materialized.createdValues].map((row) => [
75520
75529
  row.id,
@@ -75522,6 +75531,59 @@ function replayStoredConstructionV4(args) {
75522
75531
  ])
75523
75532
  );
75524
75533
  }
75534
+ function compilePulledProjectDocumentBodiesV4(document) {
75535
+ const compileArgs = {
75536
+ project: document.project,
75537
+ projectFiles: document.projectFiles,
75538
+ members: document.members,
75539
+ classes: document.classes,
75540
+ enums: document.enums,
75541
+ interfaces: document.interfaces,
75542
+ constructors: document.constructors ?? []
75543
+ };
75544
+ for (const constructor2 of compileArgs.constructors) {
75545
+ compileConstructorRecord({ ...compileArgs, constructor: constructor2 });
75546
+ }
75547
+ const ownerClassByMemberId = new Map(
75548
+ compileArgs.classes.flatMap(
75549
+ (schemaClass2) => Object.values(schemaClass2.schema).map(
75550
+ (memberId) => [memberId, schemaClass2]
75551
+ )
75552
+ )
75553
+ );
75554
+ for (const member of compileArgs.members) {
75555
+ compileAuthoredMemberBodies({
75556
+ ...compileArgs,
75557
+ member,
75558
+ thisClass: ownerClassByMemberId.get(member.id) ?? null
75559
+ });
75560
+ }
75561
+ }
75562
+ function compilePulledMemberInitializerBodyV4(document, memberId) {
75563
+ const compileArgs = {
75564
+ project: document.project,
75565
+ projectFiles: document.projectFiles,
75566
+ members: document.members,
75567
+ classes: document.classes,
75568
+ enums: document.enums,
75569
+ interfaces: document.interfaces,
75570
+ constructors: document.constructors ?? []
75571
+ };
75572
+ const member = compileArgs.members.find((entry) => entry.id === memberId);
75573
+ if (member === void 0) {
75574
+ throw new Error(
75575
+ `Cannot compile initializer dependency for missing member "${memberId}".`
75576
+ );
75577
+ }
75578
+ const thisClass = compileArgs.classes.find(
75579
+ (schemaClass2) => Object.values(schemaClass2.schema).includes(memberId)
75580
+ ) ?? null;
75581
+ compileMemberInitializerBody({
75582
+ ...compileArgs,
75583
+ member,
75584
+ thisClass
75585
+ });
75586
+ }
75525
75587
  function readPulledProjectDocumentV4(records2) {
75526
75588
  return readProjectDocument(
75527
75589
  pulledProjectDocumentRaw(replayWorkspace(records2))
@@ -75564,6 +75626,7 @@ var init_initializer_replay = __esm({
75564
75626
  init_project_document_read();
75565
75627
  init_server_preparation_preflight();
75566
75628
  init_projection();
75629
+ init_neoscript_evaluator();
75567
75630
  }
75568
75631
  });
75569
75632
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.21.4",
3
+ "version": "0.21.5",
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.4 -->
12
+ <!-- reviewed-through-cli: 0.21.5 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -73,7 +73,7 @@ wrappers.
73
73
  The marker near the top of `SKILL.md` must exactly match the package version:
74
74
 
75
75
  ```html
76
- <!-- reviewed-through-cli: 0.21.4 -->
76
+ <!-- reviewed-through-cli: 0.21.5 -->
77
77
  ```
78
78
 
79
79
  The quoted version above is checked too, so this instruction cannot go stale