Skip to content

feat(pipeline): version tag on indexed nodes + diff_versions MCP tool - #1064

Open
isc-tdyar wants to merge 4 commits into
DeusData:mainfrom
isc-tdyar:feat/version-diff
Open

feat(pipeline): version tag on indexed nodes + diff_versions MCP tool#1064
isc-tdyar wants to merge 4 commits into
DeusData:mainfrom
isc-tdyar:feat/version-diff

Conversation

@isc-tdyar

Copy link
Copy Markdown
Contributor

Adds version tagging on all indexed nodes and a diff_versions MCP tool for cross-version change detection.

Closes #1062. Depends on #467 (ObjectScript language support) merging first — the Storage node inline-JSON change targets ObjectScript Storage nodes.

New API

cbm_pipeline_set_version(cbm_pipeline_t *p, const char *version_tag)

Sets a version label (e.g. "28.0") on a pipeline instance. When set, the tag is written as a "version" property on every node. Also bypasses the incremental-index path so versioned indexing always does a full pass — the graph accumulates both versions side-by-side.

index_repository tool: new version parameter

{ "repo_path": "/repos/myproject-28.0", "version": "28.0" }

When omitted, a version-like segment (digits and dots) is auto-derived from the repo path. No behavior change for projects that don't use versioning.

diff_versions MCP tool

{
  "project":      "myproject",
  "from_version": "28.0",
  "to_version":   "30.0",
  "label":        "Class"
}

Returns {"added": [...], "removed": [...], "from_version": "28.0", "to_version": "30.0"}. Default label Class, limit 500 per side.

Files changed

  • src/pipeline/pipeline.hcbm_pipeline_set_version() declaration
  • src/pipeline/pipeline_internal.hversion_tag field on ctx
  • src/pipeline/pipeline.c — setter, free, skip-incremental guard, ctx wiring
  • src/pipeline/pass_definitions.cversion property on all nodes; Storage nodes with structured docstring have fields merged inline as raw JSON rather than escaped
  • src/pipeline/pass_parallel.c — same changes mirrored; version_tag threaded through parallel worker
  • src/mcp/mcp.ccbm_derive_version_from_path() helper, version param on index_repository, diff_versions tool registered and handler implemented

@isc-tdyar
isc-tdyar requested a review from DeusData as a code owner July 12, 2026 19:58
@DeusData DeusData added this to the 0.9.2-rc milestone Jul 14, 2026
@DeusData DeusData added enhancement New feature or request cypher Cypher query language parser/executor bugs priority/backlog Valuable contribution, lower scheduling urgency; review when maintainer capacity opens. labels Jul 14, 2026
@DeusData

Copy link
Copy Markdown
Owner

The current PR cannot be reviewed against its stated purpose. Its title and body describe version tags and a diff_versions tool, but the branch currently contains the same body-token extractor change as PR #1060 and no versioning or MCP-tool implementation. Please restore the intended branch contents or close this PR if it was superseded; we should not review or merge a title/diff mismatch.

@isc-tdyar
isc-tdyar force-pushed the feat/version-diff branch 3 times, most recently from aa67b7f to cc2114c Compare July 15, 2026 00:53
@isc-tdyar
isc-tdyar force-pushed the feat/version-diff branch from cc2114c to cfc72f0 Compare July 25, 2026 08:39
@isc-tdyar

Copy link
Copy Markdown
Contributor Author

You were right, the branch did contain the body-token change from #1060 instead of the versioning work. That was a mistake in how I built the branch, not a stale description. It has since been rebuilt from scratch off main with the intended contents, and I've just rebased it again onto current main to clear the merge conflict.

What's in the diff now:

  • version_tag plumbed through the pipeline (cbm_pipeline_set_version(), stamped onto nodes at insert time, including the ObjectScript parallel extraction path)
  • diff_versions MCP tool: added/removed node detection between two version tags via OPTIONAL MATCH anti-joins
  • optional version argument on index_repository, plus derivation from a trailing version-like path segment (/repos/MyApp/28.0 -> 28.0)
  • diff_versions registered in TOOL_ANNOTATIONS as read-only, non-destructive, idempotent, and in the annotation-coverage test

Incremental indexing is skipped when a version tag is set, since a version stamp needs a full pass to be coherent.

Sorry for the wasted review cycle on the mismatch. Ready for review when you get to it, and no rush, I know #1063 is also in your queue.

Add cbm_pipeline_set_version() to stamp a version label (e.g. '28.0',
'30.0') on every node emitted during indexing. Versioned runs bypass
the incremental path so both versions accumulate side-by-side in the
graph.

Add diff_versions MCP tool: given a project, from_version, and
to_version, returns added and removed node names (default label: Class,
limit 500 per side) using OPTIONAL MATCH anti-join queries.

Also auto-derives version from trailing numeric path segment in
index_repository (e.g. /exports/MyApp/28.0 → version='28.0') when
the version param is omitted.

Refs DeusData#1065

Signed-off-by: Thomas Dyar <tdyar@intersystems.com>
Signed-off-by: Thomas Dyar <tdyar@intersystems.com>
Signed-off-by: Thomas Dyar <tdyar@intersystems.com>
…ion path

Signed-off-by: Thomas Dyar <tdyar@intersystems.com>
@isc-tdyar
isc-tdyar force-pushed the feat/version-diff branch from cfc72f0 to aae611e Compare July 28, 2026 22:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cypher Cypher query language parser/executor bugs enhancement New feature or request priority/backlog Valuable contribution, lower scheduling urgency; review when maintainer capacity opens.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Version tags on indexed nodes + diff_versions tool for cross-version change detection

2 participants