v0.9.68
Notifuse/notifusev0.9.68Sep 25, 2026by safishamsi
Upgrading?
AI Summary
This release prioritizes security by fixing a shell injection vulnerability in the watch command and includes numerous bug fixes for incremental updates, type resolution, dependency parsing, and Windows compatibility.
Key Highlights
- Security fix prevents shell injection in `/graphify add ... --watch` by using a trusted root file instead of raw input
- Incremental updates now preserve cross-file edges (imports/calls) when re-extracting a single file
- C# type resolution correctly excludes same-named non-type nodes (like enum members) from type-definition index
- Maven dependency parsing now resolves inherited group IDs and property placeholders from the parent block
- Windows process management now correctly propagates exit codes for PYTHONHASHSEED re-execution
Full Release Notes
- Security: the `/graphify add ... --watch` reference no longer passes the raw, agent-substituted `INPUT_PATH` placeholder unquoted into a shell command (`… -m graphify.watch INPUT_PATH`), where a scan root containing `$(…)`, backticks, or `;` could execute — a follow-on to the Step 1 fix. The watcher now reads the trusted `graphify-out/.graphify_root` that Step 1 resolves, so there is no path to substitute (#3742, #3642, thanks @ayushcodes10). The identical placeholder still appears in the Aider/Devin monolith `--watch` snippet and is tracked separately.
- Fix: incremental updates (`update`/`extract --code-only`/`watch`) now preserve a cross-file `imports`/`calls`/`uses` edge whose target symbol lives in an unchanged file — the symbol-resolution facts pass widens its target index with the read-only resolution context, so re-extracting one file no longer silently drops its edges into the rest of the graph; a genuinely removed edge is still pruned (#3812, #3776, thanks @hopstreax).
- Fix: C# type references (`inherits`/`implements`/parameter/return/base types) no longer resolve to a same-named non-type node — an enum member, property, field, or method sharing a type's name is excluded from the type-definition index, so a class inherits from the real base rather than a stray member; resolution of partial classes without a `contains` edge is restored (#3815, #3795, thanks @hopstreax).
- Fix: dedup now keeps the node with a real source location over a richer but source-less one when merging duplicates, so a merged entity points at real code instead of an inferred/external stub; the loser's attributes are still folded onto the survivor (#3786, #3775, thanks @ayushcodes10).
- Fix: Maven `pom.xml` ingestion resolves a dependency's inherited `groupId`/`version` from the local `<parent>` block and substitutes `${property}` / `${project.*}` placeholders (offline, one level), so previously-dangling `depends_on` edges now connect (#3823, #3806, thanks @chiliec).
- Fix: the PYTHONHASHSEED re-exec (0.9.67) now waits for and propagates the child's exit code on Windows instead of returning early — `os.execvpe` is a true process replacement only on POSIX; on Windows it spawned a new process and let the parent race ahead unpinned, crashing `update`/`extract`/`cluster-only`/`label`. The Windows path now spawns via `subprocess.run` and exits with the child's status; the POSIX path is unchanged (#3816, #3799, thanks @sinangumuskabak-sys).
- Fix: Terraform secret redaction now also covers a secret-named `variable` default and `output` value — the secret's name lives in the block label, so the literal sat under the generic `default`/`value` key that the key-name check never flagged (`variable "db_password" { default = "…" }` reached `graph.json` verbatim). Redacted when the label names a secret or the block sets `sensitive = true` (#3817, #3644/#3762 follow-up, thanks @breken-ai).
- Fix: fixed-format COBOL that carries a sequence NUMBER in columns 1-6 (not blanks) is now detected as fixed-format — previously it was misread as free-format, the sequence digits stayed in the code, and every paragraph and `PERFORM` edge was silently dropped, leaving only the file and program nodes (#3813, thanks @abhay-codes07).
- Fix: `PERFORM A THRU/THROUGH Z` now links both endpoints of the range, not just the entry paragraph, so the range-end no longer lacks an inbound `calls` edge; a dangling THRU target is skipped rather than fabricated (#3814, thanks @abhay-codes07).
- Fix: `GRAPH_REPORT.md`'s Knowledge Gaps section only offers "undocumented components" as an explanation for an isolated node when the graph actually has a semantic layer (a document/paper/image node an LLM extracted meaning from) — a code-only graph no longer lists a possibility it can never have (#3828, #3801, thanks @ayushcodes10).
Related Repositories
Get up and running with Kimi, GLM, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
Terminal session manager for AI coding agents. One TUI for Claude, Gemini, OpenCode, Codex, and more.
RAGFlow is a leading open-source Retrieval-Augmented Generation (RAG) engine that fuses cutting-edge RAG with Agent capabilities to create a superior context layer for LLMs
The world’s fastest framework for building websites.