Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 0 additions & 51 deletions .changeset/yellow-penguins-cheat.md

This file was deleted.

47 changes: 47 additions & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,52 @@
# rushdb-docs

## 2.9.0

### Minor Changes

- d05e56c: Add variable-length (multihop) traversal and cycle detection to SearchQuery

**`$relation.hops`** — traverse a relationship pattern up to N hops in a single `where` block, without naming intermediate records:

```ts
db.records.find({
labels: ['EMPLOYEE'],
where: {
EMPLOYEE: {
$alias: '$manager',
$relation: { type: 'REPORTS_TO', direction: 'out', hops: { min: 1, max: 4 } },
name: { $contains: 'Alice' }
}
}
})
```

`hops` accepts an exact count (`hops: 3`) or a range (`{ min?, max? }`, `min` defaults to 1). `type` and `direction` apply to every hop; the nested label and its criteria constrain only the endpoint record. Omitting `type` traverses any relationship — RushDB's internal property metadata edges are automatically excluded, so untyped traversal never leaves the user's data model.

**`$cycle`** — find records sitting on a closed path back to themselves (fraud rings, circular ownership, dependency cycles):

```ts
db.records.find({
labels: ['ACCOUNT'],
where: {
RING: {
$cycle: true,
$relation: { type: 'TRANSFERRED_TO', direction: 'out', hops: { min: 2, max: 6 } }
}
}
})
```

A `$cycle` block requires `$relation` with `hops` (`min` ≥ 2, the default) and accepts no other keys; its label key is a display name. Combine with `$not` to select records not on a cycle.

**Traversal depth policy** — `hops.max` is capped per deployment via `RUSHDB_MAX_TRAVERSAL_HOPS` (default 25) on the shared cloud connection. Self-hosted deployments (`RUSHDB_SELF_HOSTED=true`) and projects with a custom external Neo4j allow unbounded traversal (`max` omitted), guarded by the existing transaction timeout.

Also in this release:

- New SDK types: `TraversalHops` and `TraversalRelationOptions` (TypeScript); matching `TypedDict`s in the Python SDK.
- NL→query (smart search), the MCP server spec/tools, and the query-builder/data-modeling skills all understand `hops` and `$cycle`.
- Docs: full operator reference in Where Operators, updated hierarchy-modeling tutorial, and a new "Detecting Fraud Rings" tutorial.

## 2.8.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion docs/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "rushdb-docs",
"version": "2.8.1",
"version": "2.9.0",
"private": true,
"license": "Apache-2.0",
"scripts": {
Expand Down
47 changes: 47 additions & 0 deletions packages/javascript-sdk/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,52 @@
# @rushdb/javascript-sdk

## 2.9.0

### Minor Changes

- d05e56c: Add variable-length (multihop) traversal and cycle detection to SearchQuery

**`$relation.hops`** — traverse a relationship pattern up to N hops in a single `where` block, without naming intermediate records:

```ts
db.records.find({
labels: ['EMPLOYEE'],
where: {
EMPLOYEE: {
$alias: '$manager',
$relation: { type: 'REPORTS_TO', direction: 'out', hops: { min: 1, max: 4 } },
name: { $contains: 'Alice' }
}
}
})
```

`hops` accepts an exact count (`hops: 3`) or a range (`{ min?, max? }`, `min` defaults to 1). `type` and `direction` apply to every hop; the nested label and its criteria constrain only the endpoint record. Omitting `type` traverses any relationship — RushDB's internal property metadata edges are automatically excluded, so untyped traversal never leaves the user's data model.

**`$cycle`** — find records sitting on a closed path back to themselves (fraud rings, circular ownership, dependency cycles):

```ts
db.records.find({
labels: ['ACCOUNT'],
where: {
RING: {
$cycle: true,
$relation: { type: 'TRANSFERRED_TO', direction: 'out', hops: { min: 2, max: 6 } }
}
}
})
```

A `$cycle` block requires `$relation` with `hops` (`min` ≥ 2, the default) and accepts no other keys; its label key is a display name. Combine with `$not` to select records not on a cycle.

**Traversal depth policy** — `hops.max` is capped per deployment via `RUSHDB_MAX_TRAVERSAL_HOPS` (default 25) on the shared cloud connection. Self-hosted deployments (`RUSHDB_SELF_HOSTED=true`) and projects with a custom external Neo4j allow unbounded traversal (`max` omitted), guarded by the existing transaction timeout.

Also in this release:

- New SDK types: `TraversalHops` and `TraversalRelationOptions` (TypeScript); matching `TypedDict`s in the Python SDK.
- NL→query (smart search), the MCP server spec/tools, and the query-builder/data-modeling skills all understand `hops` and `$cycle`.
- Docs: full operator reference in Where Operators, updated hierarchy-modeling tutorial, and a new "Detecting Fraud Rings" tutorial.

## 2.8.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/javascript-sdk/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
"rush-db"
],
"license": "Apache-2.0",
"version": "2.8.1",
"version": "2.9.0",
"type": "module",
"files": [
"dist"
Expand Down
52 changes: 52 additions & 0 deletions packages/mcp-server/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,57 @@
# @rushdb/mcp-server

## 2.9.0

### Minor Changes

- d05e56c: Add variable-length (multihop) traversal and cycle detection to SearchQuery

**`$relation.hops`** — traverse a relationship pattern up to N hops in a single `where` block, without naming intermediate records:

```ts
db.records.find({
labels: ['EMPLOYEE'],
where: {
EMPLOYEE: {
$alias: '$manager',
$relation: { type: 'REPORTS_TO', direction: 'out', hops: { min: 1, max: 4 } },
name: { $contains: 'Alice' }
}
}
})
```

`hops` accepts an exact count (`hops: 3`) or a range (`{ min?, max? }`, `min` defaults to 1). `type` and `direction` apply to every hop; the nested label and its criteria constrain only the endpoint record. Omitting `type` traverses any relationship — RushDB's internal property metadata edges are automatically excluded, so untyped traversal never leaves the user's data model.

**`$cycle`** — find records sitting on a closed path back to themselves (fraud rings, circular ownership, dependency cycles):

```ts
db.records.find({
labels: ['ACCOUNT'],
where: {
RING: {
$cycle: true,
$relation: { type: 'TRANSFERRED_TO', direction: 'out', hops: { min: 2, max: 6 } }
}
}
})
```

A `$cycle` block requires `$relation` with `hops` (`min` ≥ 2, the default) and accepts no other keys; its label key is a display name. Combine with `$not` to select records not on a cycle.

**Traversal depth policy** — `hops.max` is capped per deployment via `RUSHDB_MAX_TRAVERSAL_HOPS` (default 25) on the shared cloud connection. Self-hosted deployments (`RUSHDB_SELF_HOSTED=true`) and projects with a custom external Neo4j allow unbounded traversal (`max` omitted), guarded by the existing transaction timeout.

Also in this release:

- New SDK types: `TraversalHops` and `TraversalRelationOptions` (TypeScript); matching `TypedDict`s in the Python SDK.
- NL→query (smart search), the MCP server spec/tools, and the query-builder/data-modeling skills all understand `hops` and `$cycle`.
- Docs: full operator reference in Where Operators, updated hierarchy-modeling tutorial, and a new "Detecting Fraud Rings" tutorial.

### Patch Changes

- Updated dependencies [d05e56c]
- @rushdb/javascript-sdk@2.9.0

## 2.8.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/mcp-server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"tools"
],
"license": "Apache-2.0",
"version": "2.8.1",
"version": "2.9.0",
"type": "module",
"main": "./build/index.js",
"bin": {
Expand Down
47 changes: 47 additions & 0 deletions packages/skills/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,52 @@
# @rushdb/skills

## 2.9.0

### Minor Changes

- d05e56c: Add variable-length (multihop) traversal and cycle detection to SearchQuery

**`$relation.hops`** — traverse a relationship pattern up to N hops in a single `where` block, without naming intermediate records:

```ts
db.records.find({
labels: ['EMPLOYEE'],
where: {
EMPLOYEE: {
$alias: '$manager',
$relation: { type: 'REPORTS_TO', direction: 'out', hops: { min: 1, max: 4 } },
name: { $contains: 'Alice' }
}
}
})
```

`hops` accepts an exact count (`hops: 3`) or a range (`{ min?, max? }`, `min` defaults to 1). `type` and `direction` apply to every hop; the nested label and its criteria constrain only the endpoint record. Omitting `type` traverses any relationship — RushDB's internal property metadata edges are automatically excluded, so untyped traversal never leaves the user's data model.

**`$cycle`** — find records sitting on a closed path back to themselves (fraud rings, circular ownership, dependency cycles):

```ts
db.records.find({
labels: ['ACCOUNT'],
where: {
RING: {
$cycle: true,
$relation: { type: 'TRANSFERRED_TO', direction: 'out', hops: { min: 2, max: 6 } }
}
}
})
```

A `$cycle` block requires `$relation` with `hops` (`min` ≥ 2, the default) and accepts no other keys; its label key is a display name. Combine with `$not` to select records not on a cycle.

**Traversal depth policy** — `hops.max` is capped per deployment via `RUSHDB_MAX_TRAVERSAL_HOPS` (default 25) on the shared cloud connection. Self-hosted deployments (`RUSHDB_SELF_HOSTED=true`) and projects with a custom external Neo4j allow unbounded traversal (`max` omitted), guarded by the existing transaction timeout.

Also in this release:

- New SDK types: `TraversalHops` and `TraversalRelationOptions` (TypeScript); matching `TypedDict`s in the Python SDK.
- NL→query (smart search), the MCP server spec/tools, and the query-builder/data-modeling skills all understand `hops` and `$cycle`.
- Docs: full operator reference in Where Operators, updated hierarchy-modeling tutorial, and a new "Detecting Fraud Rings" tutorial.

## 2.8.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/skills/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"cursor"
],
"license": "Apache-2.0",
"version": "2.8.1",
"version": "2.9.0",
"files": [
"rushdb-query-builder",
"rushdb-agent-memory",
Expand Down
47 changes: 47 additions & 0 deletions platform/core/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,52 @@
# rushdb-core

## 2.9.0

### Minor Changes

- d05e56c: Add variable-length (multihop) traversal and cycle detection to SearchQuery

**`$relation.hops`** — traverse a relationship pattern up to N hops in a single `where` block, without naming intermediate records:

```ts
db.records.find({
labels: ['EMPLOYEE'],
where: {
EMPLOYEE: {
$alias: '$manager',
$relation: { type: 'REPORTS_TO', direction: 'out', hops: { min: 1, max: 4 } },
name: { $contains: 'Alice' }
}
}
})
```

`hops` accepts an exact count (`hops: 3`) or a range (`{ min?, max? }`, `min` defaults to 1). `type` and `direction` apply to every hop; the nested label and its criteria constrain only the endpoint record. Omitting `type` traverses any relationship — RushDB's internal property metadata edges are automatically excluded, so untyped traversal never leaves the user's data model.

**`$cycle`** — find records sitting on a closed path back to themselves (fraud rings, circular ownership, dependency cycles):

```ts
db.records.find({
labels: ['ACCOUNT'],
where: {
RING: {
$cycle: true,
$relation: { type: 'TRANSFERRED_TO', direction: 'out', hops: { min: 2, max: 6 } }
}
}
})
```

A `$cycle` block requires `$relation` with `hops` (`min` ≥ 2, the default) and accepts no other keys; its label key is a display name. Combine with `$not` to select records not on a cycle.

**Traversal depth policy** — `hops.max` is capped per deployment via `RUSHDB_MAX_TRAVERSAL_HOPS` (default 25) on the shared cloud connection. Self-hosted deployments (`RUSHDB_SELF_HOSTED=true`) and projects with a custom external Neo4j allow unbounded traversal (`max` omitted), guarded by the existing transaction timeout.

Also in this release:

- New SDK types: `TraversalHops` and `TraversalRelationOptions` (TypeScript); matching `TypedDict`s in the Python SDK.
- NL→query (smart search), the MCP server spec/tools, and the query-builder/data-modeling skills all understand `hops` and `$cycle`.
- Docs: full operator reference in Where Operators, updated hierarchy-modeling tutorial, and a new "Detecting Fraud Rings" tutorial.

## 2.8.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion platform/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "rushdb-core",
"version": "2.8.1",
"version": "2.9.0",
"description": "RushDB Core",
"private": true,
"license": "Elastic License 2.0",
Expand Down
Loading
Loading