@curdx/flow 2.3.6 → 2.3.7

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.
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Claude Code Discipline Layer — spec-driven workflow + goal-backward verification + Karpathy 4 principles enforced via gates. Stops Claude from faking \"done\" on non-trivial features.",
9
- "version": "2.3.6"
9
+ "version": "2.3.7"
10
10
  },
11
11
  "allowCrossMarketplaceDependenciesOn": [
12
12
  "context7-marketplace"
@@ -16,7 +16,7 @@
16
16
  "name": "curdx-flow",
17
17
  "source": "./",
18
18
  "description": "Claude Code Discipline Layer — spec-driven workflow + goal-backward verification + Karpathy 4 principles enforced via gates. Stops Claude from faking \"done\" on non-trivial features.",
19
- "version": "2.3.6",
19
+ "version": "2.3.7",
20
20
  "author": {
21
21
  "name": "wdx",
22
22
  "email": "bydongxin@gmail.com"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "curdx-flow",
3
- "version": "2.3.6",
3
+ "version": "2.3.7",
4
4
  "description": "Claude Code Discipline Layer — spec-driven workflow + goal-backward verification + Karpathy 4 principles enforced via gates. Stops Claude from faking \"done\" on non-trivial features.",
5
5
  "author": {
6
6
  "name": "wdx",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.3.7
4
+
5
+ - taught `doctor` to detect source/package-vs-installed plugin version drift so local plugin development and release validation no longer silently run against stale Claude plugin cache state
6
+ - exposed bundled plugin body version in the runtime report and machine-readable doctor payload for automation consumers
7
+ - documented the reinstall/restart recovery path when Claude is still loading an older CurDX-Flow build
8
+
3
9
  ## 2.3.6
4
10
 
5
11
  - taught `doctor` to inspect file-based Claude Code managed settings and apply them at the correct highest-precedence layer for CurDX-Flow plugin options
package/cli/README.md CHANGED
@@ -44,6 +44,8 @@ External diagnostics: claude CLI / curdx-flow / required MCPs / recommended plug
44
44
 
45
45
  `--json` emits the full health result as machine-readable JSON for CI, wrappers, or external diagnostics. It includes `contractVersion`, `metadata.appliedFixes`, settings inspection scope metadata, the rendered report structure, and raw `doctorData`, including CurDX-Flow plugin option precedence, file-based managed settings, and runtime env projection.
46
46
 
47
+ `doctor` also compares the plugin body shipped with the current CLI/package against the `curdx-flow` version Claude actually has installed, so local development and release validation do not silently run against stale plugin cache state.
48
+
47
49
  ### Project initialization (not a CLI command)
48
50
 
49
51
  Project initialization is a Claude Code slash command, not a CLI one. After `install`, open your project in Claude Code and run:
@@ -163,9 +163,12 @@ export async function readBundledPluginRuntimeDefaults(packageRoot = PACKAGE_ROO
163
163
  const pluginSettingsPath = path.join(packageRoot, "settings.json");
164
164
  const pluginManifestPath = path.join(packageRoot, ".claude-plugin", "plugin.json");
165
165
  const monitorsPath = path.join(packageRoot, "monitors", "monitors.json");
166
+ const packageJsonPath = path.join(packageRoot, "package.json");
166
167
 
167
168
  const state = {
168
169
  exists: false,
170
+ packageVersion: null,
171
+ pluginVersion: null,
169
172
  defaultAgent: null,
170
173
  subagentStatusLineCommand: null,
171
174
  monitorCount: 0,
@@ -189,6 +192,13 @@ export async function readBundledPluginRuntimeDefaults(packageRoot = PACKAGE_ROO
189
192
  pluginManifest = null;
190
193
  }
191
194
 
195
+ try {
196
+ const pkg = JSON.parse(await fs.readFile(packageJsonPath, "utf-8"));
197
+ state.packageVersion = typeof pkg?.version === "string" ? pkg.version : null;
198
+ } catch {
199
+ state.packageVersion = null;
200
+ }
201
+
192
202
  try {
193
203
  monitors = JSON.parse(await fs.readFile(monitorsPath, "utf-8"));
194
204
  } catch {
@@ -200,6 +210,7 @@ export async function readBundledPluginRuntimeDefaults(packageRoot = PACKAGE_ROO
200
210
  }
201
211
 
202
212
  state.exists = true;
213
+ state.pluginVersion = typeof pluginManifest?.version === "string" ? pluginManifest.version : null;
203
214
  state.defaultAgent = typeof pluginSettings?.agent === "string" ? pluginSettings.agent : null;
204
215
  state.subagentStatusLineCommand =
205
216
  typeof pluginSettings?.subagentStatusLine?.command === "string"
@@ -263,9 +263,23 @@ export function buildDoctorReport({
263
263
  pushLine(lines, "ok", `Node ${nodeVersion}`);
264
264
 
265
265
  const curdx = plugins.find((plugin) => plugin.name === "curdx-flow");
266
+ const bundledVersion =
267
+ bundledPluginRuntimeDefaults?.pluginVersion || bundledPluginRuntimeDefaults?.packageVersion || null;
266
268
  if (curdx) {
267
269
  if (curdx.status === "enabled") {
268
270
  pushLine(lines, "ok", `curdx-flow v${curdx.version} (enabled)`);
271
+ if (bundledVersion && curdx.version && curdx.version !== bundledVersion) {
272
+ pushLine(
273
+ lines,
274
+ "warn",
275
+ `curdx-flow source/body v${bundledVersion} differs from installed v${curdx.version}`,
276
+ [
277
+ "you are not validating the same CurDX-Flow build that Claude currently loads",
278
+ "reinstall the plugin from the current source/package, then restart Claude Code",
279
+ "run: npx @curdx/flow install --all",
280
+ ]
281
+ );
282
+ }
269
283
  } else {
270
284
  pushLine(
271
285
  lines,
@@ -442,6 +456,14 @@ export function buildDoctorReport({
442
456
  if (bundledPluginRuntimeDefaults?.exists) {
443
457
  const bundledRuntimeSection = createSection("CurDX-Flow bundled runtime:");
444
458
 
459
+ if (bundledVersion) {
460
+ pushSectionLine(
461
+ bundledRuntimeSection,
462
+ "info",
463
+ `Bundled plugin body v${bundledVersion}`
464
+ );
465
+ }
466
+
445
467
  if (bundledPluginRuntimeDefaults.defaultAgent) {
446
468
  pushSectionLine(
447
469
  bundledRuntimeSection,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curdx/flow",
3
- "version": "2.3.6",
3
+ "version": "2.3.7",
4
4
  "description": "Skill-first discipline layer and CLI installer for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {