@neocompose/cli 0.7.5 → 0.7.6

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.6] - 2026-07-22
11
+
12
+ ### Fixed
13
+
14
+ - Regenerate readable NeoFlow source names during force and reset pulls, and
15
+ allow explicit regeneration during a normal pull.
16
+
10
17
  ## [0.7.5] - 2026-07-22
11
18
 
12
19
  ### Fixed
package/README.md CHANGED
@@ -338,7 +338,7 @@ neo dialogue new CapitolColdBoot --primary Outpost=Assets.Capitol --group Capito
338
338
  | `login` / `whoami` | Authenticate and inspect the selected profile. |
339
339
  | `init --project <id> [--version <id>]` | Create a format-4 working copy and perform its first reset pull. |
340
340
  | `doctor` | Validate format/compiler/editor/source/file contracts; no .NET discovery. |
341
- | `pull [--force\|--reset]` | Merge remote changes or regenerate canonical source and binaries. |
341
+ | `pull [--force\|--reset] [--regenerate-source-names]` | Merge remote changes or regenerate canonical source, names, and binaries. |
342
342
  | `status [--json]` / `diff [--json]` | Compile source and show semantic records, spans, digests, and upload intent. |
343
343
  | `push [--dry-run] [--accept-bump]` | Validate or commit one atomic compare-and-swap transaction. |
344
344
  | `dev [--push]` | Watch remote/local changes; pushing remains opt-in. |
@@ -362,12 +362,12 @@ security boundary.
362
362
 
363
363
  ## Regenerating dialogue source names
364
364
 
365
- Normal pull preserves source filenames and symbols by stable record ID. To
366
- deliberately replace older machine-generated dialogue names with readable
367
- names derived from the editor, run:
365
+ Normal pull preserves source filenames and symbols by stable record ID. Force
366
+ and reset pulls always derive readable dialogue names from authoritative
367
+ records. To deliberately refresh those names during a normal merge, run:
368
368
 
369
369
  ```sh
370
- neo pull --reset --regenerate-source-names
370
+ neo pull --regenerate-source-names
371
371
  neo status
372
372
  neo push --dry-run
373
373
  ```
package/dist/neo.mjs CHANGED
@@ -48051,11 +48051,6 @@ import {
48051
48051
  } from "node:fs";
48052
48052
  import { dirname as dirname5, join as join8 } from "node:path";
48053
48053
  async function runPull(workspace, options) {
48054
- if (options.regenerateSourceNames && !options.reset) {
48055
- throw new Error(
48056
- "--regenerate-source-names requires --reset because source-name regeneration rewrites the managed source tree."
48057
- );
48058
- }
48059
48054
  const destructive = options.force || options.reset;
48060
48055
  const hasBaseline = Object.keys(workspace.state.records).length > 0;
48061
48056
  let localByKey = /* @__PURE__ */ new Map();
@@ -48084,7 +48079,7 @@ ${blockingErrors.map((error) => ` ${error.message}`).join("\n")}`
48084
48079
  ])
48085
48080
  );
48086
48081
  }
48087
- if (!destructive && workspace.state.headTransactionHash !== void 0) {
48082
+ if (!destructive && !options.regenerateSourceNames && workspace.state.headTransactionHash !== void 0) {
48088
48083
  const convex = await createConvexClient(workspace);
48089
48084
  const signal = await convex.query(api2.projectExportData.schemaSignal, {
48090
48085
  projectId: workspace.config.projectId,
@@ -48112,7 +48107,7 @@ ${blockingErrors.map((error) => ` ${error.message}`).join("\n")}`
48112
48107
  destructive: true
48113
48108
  });
48114
48109
  const reset = resetWorkspaceToProjectSourcesV4(workspace, document, {
48115
- regenerateSourceNames: options.regenerateSourceNames
48110
+ regenerateSourceNames: true
48116
48111
  });
48117
48112
  for (const [key, state] of binaries.states) {
48118
48113
  const record3 = workspace.state.records[key];
@@ -48252,7 +48247,8 @@ ${blockingErrors.map((error) => ` ${error.message}`).join("\n")}`
48252
48247
  conflictCount,
48253
48248
  conflictKeys,
48254
48249
  localStatus,
48255
- destructive
48250
+ destructive,
48251
+ regenerateSourceNames: destructive || options.regenerateSourceNames
48256
48252
  });
48257
48253
  }
48258
48254
  async function finishFormat4Pull(args) {
@@ -48264,11 +48260,17 @@ async function finishFormat4Pull(args) {
48264
48260
  conflictCount,
48265
48261
  conflictKeys,
48266
48262
  localStatus,
48267
- destructive
48263
+ destructive,
48264
+ regenerateSourceNames
48268
48265
  } = args;
48269
- const localResult = emitProjectDocumentFilesV4(
48270
- buildEmitRecordSet(document, plans, "emit")
48266
+ const plannedLocalRecords = buildEmitRecordSet(document, plans, "emit");
48267
+ const localRecords = regenerateSourceNames ? regenerateDialogueSourceNamesV4(plannedLocalRecords) : plannedLocalRecords;
48268
+ const regeneratedRecordKeys = new Set(
48269
+ [...plannedLocalRecords].flatMap(
48270
+ ([key, record3]) => localRecords.get(key) === record3 ? [] : [key]
48271
+ )
48271
48272
  );
48273
+ const localResult = emitProjectDocumentFilesV4(localRecords);
48272
48274
  const serverResult = emitProjectDocumentFilesV4(
48273
48275
  buildEmitRecordSet(document, plans, "server")
48274
48276
  );
@@ -48305,6 +48307,10 @@ async function finishFormat4Pull(args) {
48305
48307
  emittedPaths,
48306
48308
  mainLocale: workspaceMainLocale(workspace.state.records)
48307
48309
  });
48310
+ for (const key of regeneratedRecordKeys) {
48311
+ const path = localResult.recordFiles.get(key);
48312
+ if (path !== void 0) rewritePaths.add(path);
48313
+ }
48308
48314
  let written = 0;
48309
48315
  for (const path of emittedPaths) {
48310
48316
  const local = localByPath.get(path)?.content;
@@ -48533,6 +48539,7 @@ var init_pull = __esm({
48533
48539
  init_project_manifest();
48534
48540
  init_project_documents();
48535
48541
  init_project_file_pull();
48542
+ init_dialogue_sources();
48536
48543
  }
48537
48544
  });
48538
48545
 
@@ -65732,9 +65739,9 @@ ${h("Usage")}
65732
65739
  neo pull ${d("[--force|--reset] [--regenerate-source-names]")}
65733
65740
 
65734
65741
  ${h("Flags")}
65735
- --force ${d("Discard local edits and take the current server schema.")}
65736
- --reset ${d("Destructively regenerate the entire working copy and schema marker scaffold, even when the sync head is unchanged.")}
65737
- --regenerate-source-names ${d("With --reset, derive readable dialogue symbols from editor names and stable graph order.")}
65742
+ --force ${d("Discard local edits, take the current server schema, and regenerate readable dialogue symbols.")}
65743
+ --reset ${d("Destructively regenerate the entire working copy, binaries, and readable dialogue symbols, even when the sync head is unchanged.")}
65744
+ --regenerate-source-names ${d("Regenerate readable dialogue symbols during an otherwise normal pull.")}
65738
65745
 
65739
65746
  Use ${h("--reset")} to reconstruct every managed ${h(".neo")}/${h(".neoflow")} source file
65740
65747
  and tracked project binary from the authoritative server records.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.7.5",
3
+ "version": "0.7.6",
4
4
  "description": "Neo Compose native project-source CLI with bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -62,8 +62,11 @@ neo init --project <id> [--version <id>] [--dir neo]
62
62
  ```
63
63
 
64
64
  For an existing format-4 workspace, `neo pull --reset` regenerates canonical
65
- source and managed binaries. `neo pull --force` discards local edits in favor
66
- of the server. Use neither casually.
65
+ source, readable dialogue names, and managed binaries. `neo pull --force`
66
+ discards local edits in favor of the server and also regenerates readable
67
+ dialogue names. Use neither casually. A normal
68
+ `neo pull --regenerate-source-names` refreshes only source naming as local
69
+ authored changes while retaining normal merge behavior.
67
70
 
68
71
  Neo never installs, discovers, or requires .NET. `neo doctor` validates the
69
72
  format-4 browser compiler, VS Code analysis contract/cache, source bundle, and
@@ -103,8 +106,9 @@ neo/
103
106
 
104
107
  All non-hidden `.neo`, `.neoflow`, and supported managed binaries are tracked.
105
108
  `.neo/` is ignored private state. Normal pull preserves declaration placement
106
- and spelling by stable ID when possible. Reset may regroup source into the
107
- canonical layout.
109
+ and spelling by stable ID when possible. Force and reset derive readable
110
+ dialogue names from authoritative records; reset may also regroup source into
111
+ the canonical layout.
108
112
 
109
113
  ## Native project declarations
110
114