@neocompose/cli 0.71.0 → 0.71.1

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,10 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.71.1] - 2026-10-07
4
+
5
+ - Stop refreshing untouched NeoScript bodies solely because optional source maps are absent. Authored edits, dependency changes, and `neo push --force-recompile` still compile the affected bodies.
6
+ - Keep Unity exports clean when only diagnostic locations differ from the pulled head, including line shifts caused by push inserting `@id` annotations. A clean export removes the local-build and local-save restriction without another push.
7
+
3
8
  ## [0.71.0] - 2026-10-06
4
9
 
5
10
  - Bump `neo test --reporter=json` to schema 2 for optional frame locations and coordinate spaces.
package/dist/neo.mjs CHANGED
@@ -45759,7 +45759,7 @@ var init_registry = __esm({
45759
45759
  "../packages/manifest/schema-contract/registry.mjs"() {
45760
45760
  "use strict";
45761
45761
  PROJECT_SCHEMA_CONTRACT = Object.freeze({
45762
- cliVersion: "0.71.0",
45762
+ cliVersion: "0.71.1",
45763
45763
  projectFileUploadBatchSize: 32,
45764
45764
  documentRecords: {
45765
45765
  member: {
@@ -90647,6 +90647,11 @@ var init_virtual_instance_values = __esm({
90647
90647
  });
90648
90648
 
90649
90649
  // ../src/models/neoscript/neoscript-source-catalog.ts
90650
+ function neoScriptSourceLocationsChanged(previous, next) {
90651
+ return ["getter", "setter", "action"].some(
90652
+ (key) => previous[key] !== void 0 && !canonicallyEqual2(previous[key], next[key])
90653
+ );
90654
+ }
90650
90655
  function record5(value) {
90651
90656
  return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
90652
90657
  }
@@ -90679,6 +90684,7 @@ function remapNeoScriptRecord(current, sources2) {
90679
90684
  var init_neoscript_source_catalog = __esm({
90680
90685
  "../src/models/neoscript/neoscript-source-catalog.ts"() {
90681
90686
  "use strict";
90687
+ init_canonical_json();
90682
90688
  init_compiler();
90683
90689
  }
90684
90690
  });
@@ -105501,7 +105507,7 @@ function* prepareServerOwnedSchemaCommitPasses(args) {
105501
105507
  }
105502
105508
  let hasSourceLocationChange = false;
105503
105509
  for (const [key, source] of args.scriptSources ?? []) {
105504
- if (!canonicallyEqual2(scriptSources.get(key), source))
105510
+ if (neoScriptSourceLocationsChanged(scriptSources.get(key) ?? {}, source))
105505
105511
  hasSourceLocationChange = true;
105506
105512
  scriptSources.set(key, source);
105507
105513
  }
@@ -105721,7 +105727,7 @@ function* prepareServerOwnedSchemaCommitPasses(args) {
105721
105727
  const source = scriptSources.get(key);
105722
105728
  const base = baseScriptRecords.get(key);
105723
105729
  if (targets.has(record7.id) || !source || !base) continue;
105724
- if (!sourceOnlyKeys.has(key) && canonicallyEqual2(source, neoScriptRecordSources(base)))
105730
+ if (!sourceOnlyKeys.has(key) && !neoScriptSourceLocationsChanged(neoScriptRecordSources(base), source))
105725
105731
  continue;
105726
105732
  const moved = remapNeoScriptRecord(base, source);
105727
105733
  targets.add(record7.id);
@@ -168463,7 +168469,7 @@ ${blockingErrors.map((error) => ` ${error.message}`).join("\n")}`
168463
168469
  binaryChanges: status.binaryChanges ?? []
168464
168470
  });
168465
168471
  const hasSourceBodies = (status.sourceSnapshot?.analysis.compiledBodies.length ?? 0) > 0;
168466
- if (status.changes.length === 0 && status.authoredValueSeeds.size === 0 && !hasSourceBodies) {
168472
+ if (status.changes.length === 0 && status.authoredValueSeeds.size === 0 && (!hasSourceBodies || purpose === "export" /* Export */)) {
168467
168473
  return status;
168468
168474
  }
168469
168475
  const initConversions = status.initConversions ?? [];
@@ -170701,7 +170707,10 @@ function prepareCompleteNeoScriptBodyChanges(workspace, status, schema, options
170701
170707
  const movedMemberIds = new Set(
170702
170708
  schema.members.filter((member) => {
170703
170709
  const source = context.scriptSources.get(`member:${member.id}`);
170704
- return source && !canonicallyEqual(neoScriptRecordSources(member), source);
170710
+ return source && neoScriptSourceLocationsChanged(
170711
+ neoScriptRecordSources(member),
170712
+ source
170713
+ );
170705
170714
  }).map((member) => String(member.id))
170706
170715
  );
170707
170716
  const compiledMembers = schema.members.map((member) => {
@@ -184920,7 +184929,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
184920
184929
  async function main() {
184921
184930
  const args = parseArgs(process.argv.slice(2));
184922
184931
  if (args.command === "--version") {
184923
- console.log("0.71.0");
184932
+ console.log("0.71.1");
184924
184933
  return;
184925
184934
  }
184926
184935
  if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.71.0",
3
+ "version": "0.71.1",
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.71.0 -->
12
+ <!-- reviewed-through-cli: 0.71.1 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -95,7 +95,10 @@ bases. A modified CLI can therefore write bad rows to a project its user may
95
95
  already write; keep preparation in shared `src/database` code rather than
96
96
  forking it in the CLI. The server still verifies a push's uploaded
97
97
  project-file bytes, and web editor commits use the shared client preparation protocol.
98
- Unrelated source files are not uploaded or recompiled on every push. A CLI lowering mismatch on a normal push is exposed by the next
98
+ Unrelated source files are not uploaded or recompiled on every push.
99
+ Optional source maps missing from valid stored bodies do not request a backfill.
100
+ Existing map changes still refresh locations on push; authored edits, dependency
101
+ changes, and explicit forced recompilation retain their normal compile scope. A CLI lowering mismatch on a normal push is exposed by the next
99
102
  canonical pull; `neo push --dry-run` remains the complete source-to-record
100
103
  rehearsal.
101
104
 
@@ -115,7 +118,7 @@ wrappers.
115
118
  The marker near the top of `SKILL.md` must exactly match the package version:
116
119
 
117
120
  ```html
118
- <!-- reviewed-through-cli: 0.71.0 -->
121
+ <!-- reviewed-through-cli: 0.71.1 -->
119
122
  ```
120
123
 
121
124
  The quoted version above is checked too, so this instruction cannot go stale
@@ -301,7 +301,9 @@ changed, skips codegen when only values changed since the last export into
301
301
  that Unity project, and writes `Library/NeoCompose/export.json` last for
302
302
  Unity to ingest.
303
303
 
304
- - A clean working copy exports the last pull. Local edits, `Files/` bytes
304
+ - A clean working copy exports the pulled head. Diagnostic location differences
305
+ alone, including line shifts after push inserts ids, do not make it local.
306
+ Local edits, `Files/` bytes
305
307
  included, make the export local: `project.json` gets
306
308
  `metadata.localExport`, Unity fails player builds and keeps saves under
307
309
  `NeoCompose/LocalExport`, and a push or a clean export ends it.