You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The `rust-toolchain.toml` ensures you have the right toolchain and components (clippy, rustfmt) installed automatically. The `--no-default-features` flag skips the gcode `embeddings` feature which requires cmake.
14
+
The `rust-toolchain.toml` ensures you have the right toolchain and components (clippy, rustfmt) installed automatically. CI uses `--no-default-features`; keep that build clean even when a crate has no default feature set.
15
15
16
16
## Development
17
17
@@ -41,17 +41,17 @@ All PRs must pass CI (fmt, clippy, tests) before merging.
| 3 (lowest) | Hardcoded defaults |FalkorDB port `16379` and graph name `gobby_code` once a host is configured; embeddings model `nomic-embed-text` once an API base exists |
103
103
104
104
Config values are JSON-encoded in `config_store` — strings have surrounding quotes stripped. Secret patterns like `$secret:NAME` are resolved via `secrets.rs` (Fernet decryption using machine_id + salt, 600K PBKDF2 iterations).
105
105
@@ -161,7 +161,7 @@ pass before call targets are finalized:
161
161
- Unmatched calls stay `unresolved`
162
162
- Import-bound external calls are marked `external` and retain their source module
163
163
164
-
This keeps external package calls out of the local call graph and improves Neo4j
164
+
This keeps external package calls out of the local call graph and improves FalkorDB
165
165
correctness for `callers`, `usages`, `blast-radius`, and graph-backed search.
166
166
167
167
### Language Support (languages.rs)
@@ -189,7 +189,7 @@ Files are split into overlapping chunks for BM25 content search:
189
189
190
190
1.**Hash comparison**: SHA-256 content hash per file, stored in `code_indexed_files`
191
191
2.**Stale detection**: Compare current hashes against stored hashes; files with changed hashes are re-indexed.
192
-
3.**Orphan cleanup**: Files in the DB that no longer exist on disk have their hub rows deleted. External cleanup (Neo4j/Qdrant) is handled by the daemon's reconcile/sync workers.
192
+
3.**Orphan cleanup**: Files in the DB that no longer exist on disk have their hub rows deleted. External cleanup (FalkorDB/Qdrant) is handled by the daemon's reconcile/sync workers.
193
193
4.**Per-file transactions**: PostgreSQL writes (delete old data, upsert symbols, upsert file, upsert content chunks, upsert imports/calls) are wrapped in a single transaction to prevent half-indexed files on crash.
194
194
5.**External sync flags**: Changed files are written with `graph_synced=false`, `vectors_synced=false`, and `graph_sync_attempted_at=NULL` so the daemon can regenerate graph and vector projections.
195
195
@@ -232,15 +232,15 @@ The runtime schema validator requires these tables before gcode starts index/sea
232
232
233
233
### Graph Lifecycle RPCs
234
234
235
-
Read-side graph queries still go straight to Neo4j. Graph lifecycle operations
235
+
Read-side graph queries still go straight to FalkorDB. Graph lifecycle operations
→ POST to Qdrant /collections/{name}/points/search
265
265
→ returns (symbol_id, score) pairs
266
266
267
-
Source 3: Graph Boost (Neo4j)
267
+
Source 3: Graph Boost (FalkorDB)
268
268
→ find_callers + find_usages for query term
269
269
→ returns symbol IDs that are connected in the call/import graph
270
270
271
-
Source 4: Graph Expand (Neo4j)
271
+
Source 4: Graph Expand (FalkorDB)
272
272
→ seed from top FTS + semantic hits
273
273
→ expand through callees first, then callers
274
274
@@ -293,7 +293,7 @@ score(symbol) = Σ 1/(K + rank) for each source containing the symbol
293
293
294
294
### Symbol Resolution
295
295
296
-
After RRF merge, ALL symbol IDs are resolved against PostgreSQL before computing `total`. This ensures `total` reflects the count of actually-resolvable symbols (stale Qdrant/Neo4j entries are silently skipped). Offset/limit pagination is applied after resolution.
296
+
After RRF merge, ALL symbol IDs are resolved against PostgreSQL before computing `total`. This ensures `total` reflects the count of actually-resolvable symbols (stale Qdrant/FalkorDB entries are silently skipped). Offset/limit pagination is applied after resolution.
297
297
298
298
The `total` for hybrid search is a best-effort estimate bounded by `fetch_limit`
299
299
per source — exact counts aren't feasible because RRF merges results from
@@ -320,7 +320,7 @@ All search/graph commands return a `PagedResponse` envelope:
320
320
321
321
-`--offset N` skips the first N results
322
322
-`--limit N` caps results per page (default: 10)
323
-
-`hint` is populated when Neo4j is unavailable (graph commands only)
323
+
-`hint` is populated when FalkorDB is unavailable (graph commands only)
324
324
- Text mode shows a pagination footer: `-- 10 of 47 results (use --offset 10 for more)`
325
325
326
326
## Database Schema
@@ -361,7 +361,7 @@ Gobby repository migrations/baseline; gcode only validates and uses the tables.
361
361
| symbol_count | INTEGER ||
362
362
| byte_size | INTEGER ||
363
363
| indexed_at | TIMESTAMPTZ | Cast to text for CLI output |
364
-
| graph_synced | BOOLEAN |`false` means Neo4j sync pending |
364
+
| graph_synced | BOOLEAN |`false` means FalkorDB sync pending |
365
365
| vectors_synced | BOOLEAN |`false` means Qdrant sync pending |
@@ -201,10 +201,10 @@ Useful for understanding project structure at a glance.
201
201
202
202
## Dependency Graph
203
203
204
-
Read-side graph commands require Neo4j. Gobby-managed projects usually provide this
205
-
automatically, and daemon-independent projects can opt in with `GOBBY_NEO4J_URL` and
206
-
`GOBBY_NEO4J_AUTH`. Without Neo4j, graph read commands return empty results
207
-
gracefully.
204
+
Read-side graph commands require FalkorDB. Gobby-managed projects usually provide this
205
+
automatically, and daemon-independent projects can opt in with `GOBBY_FALKORDB_HOST`,
206
+
`GOBBY_FALKORDB_PORT`, and `GOBBY_FALKORDB_PASSWORD`. Without FalkorDB, graph read
207
+
commands return empty results gracefully.
208
208
209
209
All read-side graph commands resolve fuzzy input — you don't need the exact symbol name. Resolution tries exact match, then substring match, then BM25 search across names, signatures, and docstrings. When multiple matches are found, the best is used and alternatives are shown on stderr.
210
210
@@ -320,7 +320,7 @@ gcode index --files src/config.rs src/main.rs
320
320
321
321
`gcode index` writes symbols, files, chunks, imports, and calls to the
322
322
PostgreSQL hub. It marks graph/vector sync flags dirty; the Gobby daemon handles
323
-
Neo4j graph edges and Qdrant vector sync asynchronously when it is running.
323
+
FalkorDB graph edges and Qdrant vector sync asynchronously when it is running.
324
324
BM25 search (`search-text`, `search-content`) works as soon as the transaction
325
325
commits; graph and semantic search improve once the external stores sync.
326
326
@@ -331,7 +331,7 @@ gcode invalidate
331
331
gcode index
332
332
```
333
333
334
-
In Gobby mode, `invalidate` also notifies the daemon to clean up Neo4j graph nodes and Qdrant vectors for the project. Use `--force` to skip the confirmation prompt.
334
+
In Gobby mode, `invalidate` also notifies the daemon to clean up FalkorDB graph nodes and Qdrant vectors for the project. Use `--force` to skip the confirmation prompt.
335
335
336
336
Graph projection lifecycle is separate:
337
337
@@ -348,7 +348,7 @@ gcode is daemon-independent but not database-independent:
348
348
- Database: PostgreSQL hub from `~/.gobby/bootstrap.yaml`
349
349
- Required bootstrap: `hub_backend: postgres` plus supported `database_url_ref` or `database_url`
350
350
- Identity: `.gobby/project.json`, `.gobby/gcode.json`, isolated root, linked worktree, or generated identity from `gcode init`
351
-
- Optional services: Neo4j, Qdrant, and embeddings via env vars or PostgreSQL `config_store`
351
+
- Optional services: FalkorDB, Qdrant, and embeddings via env vars or PostgreSQL `config_store`
352
352
353
353
Graph commands and semantic search become available when the required services are configured.
354
354
@@ -363,11 +363,11 @@ Both cases are reported by `gcode init`'s status line (`isolated`, `linked-workt
363
363
364
364
## Configuration
365
365
366
-
gcode resolves configuration in this order:
366
+
gcode resolves graph/vector configuration in this order:
If you get "No symbol matching 'X' found", the input didn't resolve to any indexed symbol. Try a different term or check what's indexed with `gcode search-text "X"`.
488
488
489
-
If results are empty but the symbol exists, this is expected when Neo4j is not configured. In Gobby mode, check that Neo4j is running and configured:
489
+
If results are empty but the symbol exists, this is expected when FalkorDB is not configured. In Gobby mode, check that FalkorDB is running and configured:
Copy file name to clipboardExpand all lines: docs/plans/completed/standalone-schema.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@
4
4
5
5
gcode currently cannot run without gobby having set up the database first. It has zero `CREATE TABLE` logic — writes silently fail, reads return empty when tables are missing. This plan adds self-initializing schema creation so gcode works fully standalone (FTS5 search, no external deps) while seamlessly integrating when gobby is installed (shared `~/.gobby/gobby-hub.db`).
6
6
7
-
**Value ladder:** gcode standalone = fast FTS search. With gobby = adds Qdrant semantic search, Neo4j graph, AI summaries.
7
+
**Value ladder:** gcode standalone = fast FTS search. With gobby = adds Qdrant semantic search, FalkorDB graph, AI summaries.
0 commit comments