release 0.8.24: cross-language semantics, claude-cli fix, edge direction fix, security audit

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Safi
2026-05-29 02:28:52 +01:00
co-authored by Claude Sonnet 4.6
parent 8a308519f9
commit fd1aca480f
3 changed files with 11 additions and 3 deletions
+8
View File
@@ -2,6 +2,14 @@
Full release notes with details on each version: [GitHub Releases](https://github.com/safishamsi/graphify/releases)
## 0.8.24 (2026-05-29)
- Feat: type-reference edges for ObjC, Julia, C, C++, Scala, Fortran, and PowerShell — extends cross-language semantic context work from #1015 to a second wave of languages; CI matrix now covers Python 3.10 with `faster-whisper` version guard (#1071)
- Fix: claude-cli backend no longer loops on hollow streamed responses — handles all four documented failure modes (empty stream, no JSON, missing `result`, empty `result`) with tests (#1063)
- Fix: `calls` edges no longer flip caller/callee when the same node pair appears in both directions in an undirected build — first-seen direction preserved on bidirectional collision (#1061)
- Fix: `graphify-out/.graphify_python` path prefix was missing in 8 skill files (256 instances) causing `cat: .graphify_python: No such file or directory` on every non-Claude-Code platform
- Chore: all skill files now use uv-aware interpreter detection — `uv tool run graphifyy python` preferred over shebang parsing when uv is available
## 0.8.23 (2026-05-28)
- Feat: type-reference edges for Swift, Kotlin, PHP, Rust, and Go — `references` edges with `parameter_type`, `return_type`, `generic_arg`, `field`, and `attribute` contexts; inheritance split into `inherits` (superclass) vs `implements` (protocol/interface/trait) for all five languages (#1015)
+2 -2
View File
@@ -361,7 +361,7 @@ def html_comment_text(text: str) -> str:
def stable_ascii_id(raw: str, prefix: str = "node", limit: int = 48) -> str:
"""Build a Mermaid-safe ASCII identifier with a hash suffix to avoid collisions."""
raw = str(raw or "")
digest = hashlib.sha1(raw.encode("utf-8")).hexdigest()[:8]
digest = hashlib.sha1(raw.encode("utf-8"), usedforsecurity=False).hexdigest()[:8]
slug = re.sub(r"[^A-Za-z0-9_]+", "_", raw)
slug = re.sub(r"_+", "_", slug).strip("_")
if not slug:
@@ -652,7 +652,7 @@ def html_anchor_id(raw: str, fallback: str, used: set) -> str:
base = base[:48].strip("-") or "section"
candidate = base
if candidate in used:
candidate = f"{base}-{hashlib.sha1(raw.encode('utf-8')).hexdigest()[:6]}"
candidate = f"{base}-{hashlib.sha1(raw.encode('utf-8'), usedforsecurity=False).hexdigest()[:6]}"
suffix = 2
while candidate in used:
candidate = f"{base}-{suffix}"
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "graphifyy"
version = "0.8.23"
version = "0.8.24"
description = "AI coding assistant skill (Claude Code, Codex, OpenCode, Cursor, Gemini CLI, Aider, OpenClaw, Factory Droid, Trae, Hermes, Kiro, Pi, Devin CLI, Google Antigravity) - turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph"
readme = "README.md"
license = { file = "LICENSE" }