Skip to content

Commit 98b40d6

Browse files
refactor: rename thg-* crates + surface to rustyred-* (clean break)
Workspace rename, internal + public surface: crates/thg-core -> crates/rustyred-core crates/thg-mcp -> crates/rustyred-mcp crates/thg-product-server -> crates/rustyred-server crates/thg-server -> crates/rustyred-compat-server crates/thg-resp-server -> crates/rustyred-resp-server src/thg.rs -> src/rustyred.rs Public-surface changes (no aliases — there are no public users yet, so this is the cleanest moment to ship a single name): MCP tools : thg.X.Y -> rustyred.X.Y Well-known : /.well-known/mcp/thg.json -> /.well-known/mcp/rustyred.json MCP URIs : thg://tenant/... -> rustyred://tenant/... Token scopes: thg:graph:read etc. -> rustyred:graph:read etc. Metrics : thg_total_requests etc. -> rustyred_total_requests etc. Commands : THG.RUN.BEGIN etc. -> RUSTYRED.RUN.BEGIN etc. Env var : THG_REDIS_KEY -> RUSTYRED_REDIS_KEY Redis keys : theseus:thg:tenant: -> theseus:rustyred:tenant: Prompts : thg-query etc. -> rustyred-query etc. Prep work for open-sourcing the engine under one clean brand. Naming debt left over from the original Theseus Hot Graph (THG) prototype is gone; the public surface, internal types, and crate names now all say RustyRed. cargo check --workspace: clean (one pre-existing dead-code warning, unrelated to rename). cargo test --workspace: 135 passed, 0 failed.
1 parent bc3037b commit 98b40d6

50 files changed

Lines changed: 1001 additions & 1001 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.lock

Lines changed: 62 additions & 62 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ rust-version = "1.85"
1010
[workspace]
1111
members = [
1212
".",
13-
"crates/thg-core",
14-
"crates/thg-mcp",
15-
"crates/thg-server",
16-
"crates/thg-product-server",
17-
"crates/thg-resp-server",
13+
"crates/rustyred-core",
14+
"crates/rustyred-mcp",
15+
"crates/rustyred-compat-server",
16+
"crates/rustyred-server",
17+
"crates/rustyred-resp-server",
1818
]
1919
resolver = "2"
2020

@@ -27,7 +27,7 @@ pyo3 = { version = "0.22.5", features = ["abi3-py312", "extension-module"] }
2727
numpy = "0.22"
2828
serde_json = "1.0"
2929
sha2 = "0.10"
30-
thg-core = { path = "crates/thg-core" }
30+
rustyred-core = { path = "crates/rustyred-core" }
3131
egg = "0.10"
3232
datafrog = "2.0"
3333

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ COPY Cargo.toml Cargo.lock ./
66
COPY crates ./crates
77
COPY src ./src
88

9-
RUN cargo build -p thg-product-server --release
9+
RUN cargo build -p rustyred-server --release
1010

1111
FROM debian:bookworm-slim
1212

1313
RUN apt-get update \
1414
&& apt-get install -y --no-install-recommends ca-certificates \
1515
&& rm -rf /var/lib/apt/lists/*
1616

17-
COPY --from=builder /app/target/release/thg-product-server /usr/local/bin/rusty-red-graph-server
17+
COPY --from=builder /app/target/release/rustyred-server /usr/local/bin/rusty-red-graph-server
1818

1919
# Security-by-default. RUSTY_RED_REQUIRE_AUTH=true means /v1/* and /mcp
2020
# refuse unauthenticated requests; operators must provision scoped

README.md

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Note put template ID here before making public `RUSTY_RED_GRAPH_DATABASE_TEMPLA
1515
## What Rusty Red does
1616

1717
- **Graph storage** with AOF/snapshot persistence, per-tenant isolation, single-writer serializable commits, and committed read snapshots
18-
- **Stable, versioned on-disk format** with `thg-upgrade-format` migrations between releases (no export/re-import on upgrade)
18+
- **Stable, versioned on-disk format** with `rustyred-upgrade-format` migrations between releases (no export/re-import on upgrade)
1919
- **HNSW vector search** on node properties via `instant-distance`, with hybrid scoring that blends vector similarity and graph proximity
2020
- **Inverted-index BM25 full-text search** with automatic indexing on node upserts
2121
- **H3 spatial index** on node lat/lon properties with radius and bounding-box queries
@@ -45,11 +45,11 @@ These are on the roadmap, in roughly this priority order:
4545

4646
| Crate | Purpose |
4747
|-------|---------|
48-
| `thg-core` | Graph store engine, command executor, HNSW vector index, epistemic edges |
49-
| `thg-mcp` | MCP agent port: tool dispatch, resource reads, prompt surface |
50-
| `thg-product-server` | HTTP server, query surface, graph cache, auth, OpenAPI |
51-
| `thg-server` | Standalone compatibility command server |
52-
| `thg-resp-server` | RESP protocol shim (limited, not a Redis replacement) |
48+
| `rustyred-core` | Graph store engine, command executor, HNSW vector index, epistemic edges |
49+
| `rustyred-mcp` | MCP agent port: tool dispatch, resource reads, prompt surface |
50+
| `rustyred-server` | HTTP server, query surface, graph cache, auth, OpenAPI |
51+
| `rustyred-compat-server` | Standalone compatibility command server |
52+
| `rustyred-resp-server` | RESP protocol shim (limited, not a Redis replacement) |
5353
| root crate | PyO3 compatibility bindings for native graph/search helpers |
5454

5555
## Build (local development)
@@ -78,7 +78,7 @@ second Rusty Red service.
7878
Run the product server locally:
7979

8080
```bash
81-
RUSTY_RED_MODE=embedded RUSTY_RED_DATA_DIR=data/rusty-red cargo run -p thg-product-server
81+
RUSTY_RED_MODE=embedded RUSTY_RED_DATA_DIR=data/rusty-red cargo run -p rustyred-server
8282
```
8383

8484
Strict local durability mode is explicit:
@@ -90,20 +90,20 @@ RUSTY_RED_TXN_ISOLATION=serializable \
9090
RUSTY_RED_STRICT_ACID=true \
9191
RUSTY_RED_DURABILITY=aof_always \
9292
RUSTY_RED_DATA_DIR=data/rusty-red \
93-
cargo run -p thg-product-server
93+
cargo run -p rustyred-server
9494
```
9595

9696
Core routes are documented by `GET /openapi.json`. The OpenAPI document is
9797
generated from the product server crate version and currently covers every
98-
canonical route in `crates/thg-product-server/src/router.rs`.
98+
canonical route in `crates/rustyred-server/src/router.rs`.
9999

100100
Canonical routes:
101101

102102
```text
103103
GET /health
104104
GET /ready
105105
GET /openapi.json
106-
GET /.well-known/mcp/thg.json
106+
GET /.well-known/mcp/rustyred.json
107107
GET /.well-known/agent.json
108108
POST /mcp
109109
GET /metrics
@@ -163,16 +163,16 @@ The `/mcp` endpoint exposes these tools (via JSON-RPC `tools/list` and `tools/ca
163163

164164
| Tool | Description |
165165
|------|-------------|
166-
| `thg.graph.query` / `thg.graph.explain` / `thg.graph.neighbors` | Bounded native graph reads and plan inspection |
167-
| `thg.graph.schema` / `thg.graph.index_status` | Graph schema and index-health reads |
168-
| `thg.algorithm.ppr` (alias: `thg.algo.ppr`) / `thg.algorithm.components` (`thg.algo.components`) / `thg.algorithm.pagerank` (`thg.algo.pagerank`) / `thg.algorithm.communities` (`thg.algo.communities`) | Graph algorithms: PPR, connected components, PageRank, label-propagation communities |
169-
| `thg.fulltext.search` (alias: `thg.graph.fulltext.search`) / `thg.spatial.radius` (`thg.graph.spatial.radius`) / `thg.spatial.bbox` (`thg.graph.spatial.bbox`) | Full-text and spatial read surfaces |
170-
| `thg.vector.search` | HNSW nearest-neighbor search on vector properties |
171-
| `thg.vector.hybrid` | Hybrid search blending vector similarity with graph proximity |
172-
| `thg.vector.designate` | Register a vector property for HNSW indexing (write) |
173-
| `thg.epistemic.neighbors` | Confidence-weighted epistemic traversal by edge type |
174-
| `thg.fulltext.designate` (alias: `thg.graph.fulltext.designate`) / `thg.spatial.designate` (`thg.graph.spatial.designate`) / `thg.bulk.nodes` (`thg.graph.bulk.nodes`) / `thg.bulk.edges` (`thg.graph.bulk.edges`) | Write-mode-only designation and bulk ingest tools |
175-
| `thg.admin.verify` | Admin-only index-integrity verification; rebuild remains on the HTTP graph route |
166+
| `rustyred.graph.query` / `rustyred.graph.explain` / `rustyred.graph.neighbors` | Bounded native graph reads and plan inspection |
167+
| `rustyred.graph.schema` / `rustyred.graph.index_status` | Graph schema and index-health reads |
168+
| `rustyred.algorithm.ppr` (alias: `rustyred.algo.ppr`) / `rustyred.algorithm.components` (`rustyred.algo.components`) / `rustyred.algorithm.pagerank` (`rustyred.algo.pagerank`) / `rustyred.algorithm.communities` (`rustyred.algo.communities`) | Graph algorithms: PPR, connected components, PageRank, label-propagation communities |
169+
| `rustyred.fulltext.search` (alias: `rustyred.graph.fulltext.search`) / `rustyred.spatial.radius` (`rustyred.graph.spatial.radius`) / `rustyred.spatial.bbox` (`rustyred.graph.spatial.bbox`) | Full-text and spatial read surfaces |
170+
| `rustyred.vector.search` | HNSW nearest-neighbor search on vector properties |
171+
| `rustyred.vector.hybrid` | Hybrid search blending vector similarity with graph proximity |
172+
| `rustyred.vector.designate` | Register a vector property for HNSW indexing (write) |
173+
| `rustyred.epistemic.neighbors` | Confidence-weighted epistemic traversal by edge type |
174+
| `rustyred.fulltext.designate` (alias: `rustyred.graph.fulltext.designate`) / `rustyred.spatial.designate` (`rustyred.graph.spatial.designate`) / `rustyred.bulk.nodes` (`rustyred.graph.bulk.nodes`) / `rustyred.bulk.edges` (`rustyred.graph.bulk.edges`) | Write-mode-only designation and bulk ingest tools |
175+
| `rustyred.admin.verify` | Admin-only index-integrity verification; rebuild remains on the HTTP graph route |
176176

177177
The public query surface is now split cleanly:
178178

@@ -232,10 +232,10 @@ RUSTY_RED_MCP_ALLOW_ADMIN=false
232232
## Compatibility command server
233233

234234
The product server is the recommended deployment target. A smaller compatibility
235-
HTTP command server also lives in `crates/thg-server`:
235+
HTTP command server also lives in `crates/rustyred-compat-server`:
236236

237237
```bash
238-
cargo run -p thg-server -- --host 127.0.0.1 --port 7379
238+
cargo run -p rustyred-compat-server -- --host 127.0.0.1 --port 7379
239239
```
240240

241241
Endpoints:

SECURITY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ In this posture:
2121
- `/v1/*` and `/mcp` reject requests that do not present a valid
2222
bearer token from `RUSTY_RED_API_TOKENS`.
2323
- `/health`, `/ready`, `/openapi.json`, `/.well-known/agent.json`,
24-
`/.well-known/mcp/thg.json`, and `/metrics` remain unauthenticated;
24+
`/.well-known/mcp/rustyred.json`, and `/metrics` remain unauthenticated;
2525
they expose no tenant data or mutable surface.
2626
- MCP starts in read-only mode. Write tools are unreachable until the
2727
operator explicitly enables them.
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[package]
2-
name = "thg-server"
2+
name = "rustyred-compat-server"
33
version = "0.4.0"
44
edition = "2021"
55
description = "Standalone HTTP command server for Rusty Red core."
@@ -8,4 +8,4 @@ rust-version = "1.85"
88

99
[dependencies]
1010
serde_json = "1.0"
11-
thg-core = { path = "../thg-core", features = ["redis-store"] }
11+
rustyred-core = { path = "../rustyred-core", features = ["redis-store"] }

0 commit comments

Comments
 (0)