diff --git a/CHANGELOG.md b/CHANGELOG.md index e81e3f4..76a0d5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/graphify/callflow_html.py b/graphify/callflow_html.py index 3db0874..6195adb 100644 --- a/graphify/callflow_html.py +++ b/graphify/callflow_html.py @@ -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}" diff --git a/pyproject.toml b/pyproject.toml index 0ef08f8..1c1df43 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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" }