Repository navigation
Moves latest from 0.11.0. Highlights:
- Two
egrprocesses touching one graph no longer destroy it — query commands and the MCP server hold the graph read-only (XSPEC-374). - The algorithm extension installs with the package on Windows x64, Linux x64 and macOS —
god-nodes,communities,relatedwork offline. (extension.ryugraph.iocurrently refuses connections, so on 0.11.0 these commands fail even with internet access.) - C, Swift and Bash support; unsupported files are now reported instead of silently skipped.
- An existing graph no longer stops opening after the extension file moves.
Verified on Windows (hosted runner, no C++ toolchain, extension download host blocked) by .github/workflows/windows-release-verify.yml.
Release candidates rc.1–rc.5 shipped on npm next between 2026-08-11 and 2026-09-18; entries below marked (rc.N) arrived in that candidate. Verified on Windows by .github/workflows/windows-release-verify.yml — hosted Windows, no C++ toolchain, the ALGO download host blocked.
Two egr processes touching one graph did not refuse each other — they destroyed it.
Every command opened the graph for writing, even a pure query, because opening runs initSchema. The engine is single-writer, and writer-versus-writer is not a clean refusal: measured on a real graph, one process wins, the rest are refused, and the database is left answering Trying to create a vector with ANY type to everything afterwards. It is unrecoverable except by rebuilding, and the message says nothing about what happened.
This was reachable in ordinary use. An editor's MCP server holds the graph for as long as the editor is open; a post-commit hook or a shell-startup freshness check indexes in the background; you run egr in a terminal. Any two of those overlapping was enough.
Added
-
C, Swift and Bash (rc.5) (XSPEC-414 R2–R4). Functions, structs/unions/enums, and
#include-derived module relationships for C; functions, classes/structs/enums/protocols and extensions (attributed to the type they extend, including across files) for Swift; function definitions, calls andsource/.-derived module relationships for Bash, with external commands (grep,echo, ...) never entering the graph.egr doctornow lists all three..hroutes to C++ when the same indexing run has a C++ source file alongside it, and to C otherwise (previously always C++). -
egr indexfollows an extension-less shebang script (rc.5) (#!/bin/bash,#!/usr/bin/env sh, XSPEC-414 R4) and indexes it as Bash, instead of counting it as an unsupported file. -
A new
IMPORTS(Module → Module) relationship (rc.5), resolved from C's#includeand Bash'ssource/.against the files in the same indexing run;egr index's summary and--jsonoutput report the count. -
The algorithm extension installs with the package (rc.4).
god-nodes,communitiesandrelatedneed ryugraph's ALGO extension, which until now was downloaded fromextension.ryugraph.ioon first use — so on a network that cannot reach it they did not work at all. It now ships prebuilt as@asiaostrich/engramgraph-algo-<platform>, an optional dependency npm installs only on the matching platform, and loads from there with no network and nothing written to your home directory. Platforms: Windows x64, Linux x64, macOS arm64 and x64. Linux arm64 is not included: ryugraph's ownlinux-arm64engine file is currently an x86-64 binary (predictable-labs/ryugraph#48), so there is nothing correct to build against. Everywhere else, the download still works as before. -
egr indexnames what it skipped (rc.4). Files with an extension no grammar handles are counted and reported by extension in the summary and in--json(unindexedCode), instead of silently lowering the file count. -
egr indexsays what to do next (rc.4) when most calls did not resolve (points at--scip) and when documents were found but none were recognised as specs or none are implemented in code (states the naming rule and the// implementscomment).
Fixed
- An existing graph could stop opening at all after the extension file moved (rc.4). Loading the extension writes its absolute path into the graph's write-ahead log, which is replayed on every open; egr exits without a checkpoint, so the record stayed. After a Node version switch, a reinstall, or a cleared
~/.ryu, every command on that graph — including ones that never use the extension — failed withFailed to load library. 0.11.0's download path had the same defect. egr now checkpoints right after loading. A graph already in that state opens again once the file is back at the path in the error. - MCP
index_codeparsed files with no grammar as JavaScript (rc.4), producing plausible and wrong nodes. They are now skipped and reported. - Git-branch isolation followed the caller's
GIT_DIR(rc.4) instead of the directory it was given, whenever one was set in the environment — as it is inside every git hook. --helpand the CLI docs state that the skip list is fixed and.gitignoreis not read (rc.4); the help text is generated from the list itself.
Changed
- Query commands open read-only —
callers,callees,implementers,implemented-by,impact,top,blindspots,signatures. (god-nodes,communitiesandrelatedwere on this list in rc.2 and are not: they load the algorithm extension and build a projected graph first, and both are writes. Corrected in rc.3; this entry was not.) A read-only open can be refused; refusal is all it can do. Measured: five concurrent read-only opens all succeed and the graph is intact; a writer and a reader refuse each other cleanly with the graph intact; only writer-versus-writer corrupts. - The MCP stdio server holds the graph read-only. Held for writing, it made every terminal
egrcommand fail for as long as the editor was open. Verified end-to-end: with the server running,top,implementers,blindspotsand a fullegr indexall work. index_code,index_docsandingest_feedbackover MCP now refuse by name and point at the CLI equivalent, rather than failing at a lower layer with a lock error an assistant cannot act on.- Read-only
openGraphneither creates nor migrates. Both are writes. A missing graph now says so and namesegr index, instead of silently producing an empty one.