From a4a615da97e85e62495ed5c99861a1b0527e806c Mon Sep 17 00:00:00 2001 From: Safi Date: Sun, 24 May 2026 20:40:49 +0100 Subject: [PATCH] Fix Ukrainian README typo, Unicode vocab regex, add migration note for Java extends->inherits Co-Authored-By: Claude Sonnet 4.6 --- CHANGELOG.md | 10 ++++++++++ docs/translations/README.uk-UA.md | 2 +- graphify/skill.md | 5 +++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5803910..12e937d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ Full release notes with details on each version: [GitHub Releases](https://github.com/safishamsi/graphify/releases) +## 0.8.18 (2026-05-24) + +- Fix: post-commit hook now updates graph after delete-only commits — shrink-guard is bypassed when `changed_paths` contains explicit deletions, preventing stale nodes from accumulating indefinitely (#1000) +- Fix: `graphify export` (html/obsidian/wiki/svg/graphml/neo4j) no longer collapses to "Single community" when `.graphify_analysis.json` is absent — falls back to per-node `community` attribute already present in `graph.json` (#1001) +- Fix: Ukrainian README translation updated to v8 — all new sections, correct badges, 31 languages (#995) +- Feat: semantic context tags on `references` edges for Python/JS/TS/C#/Java — `parameter_type`, `return_type`, `generic_arg`, `attribute`, `field`; C#/Java split `inherits`/`implements`; dedup key now includes context (#996) + - **Breaking:** Java `extends` edges are now emitted as `inherits` — queries filtering on `relation="extends"` for Java nodes must be updated to `relation="inherits"` +- Feat: constrained query expansion in skill — Step 0 extracts actual graph vocab and forces LLM to pick expansion tokens only from that set, preventing hallucinated expansions; Unicode regex fix captures Cyrillic/CJK labels (#998) +- Docs: Ukrainian README updated to v8 with all new sections, correct badges, YC badge, 31 language count (#995) + ## 0.8.17 (2026-05-23) - Fix: Case-sensitive call resolution for Go, Rust, and Elixir — resolvers previously lowercased both the label index and the callee name, causing `Authorize` to match `authorize` and produce phantom edges; Ruby/C#/Java/Kotlin/Scala/PHP use the same generic resolver which now splits into case-sensitive (all languages) and case-insensitive (PHP only, where function/class names are genuinely case-insensitive) dicts (#993) diff --git a/docs/translations/README.uk-UA.md b/docs/translations/README.uk-UA.md index 960a414..0196b4a 100644 --- a/docs/translations/README.uk-UA.md +++ b/docs/translations/README.uk-UA.md @@ -155,7 +155,7 @@ graphify install --project --platform codex | `openai` | OpenAI / OpenAI-сумісні API | `pip install "graphifyy[openai]"` | | `gemini` | Google Gemini API | `pip install "graphifyy[gemini]"` | | `bedrock` | AWS Bedrock (використовує IAM, без API-ключа) | `pip install "graphifyy[bedrock]"` | -| `sql` | Вилучення SQL схеит | `pip install "graphifyy[sql]"` | +| `sql` | Вилучення SQL схем | `pip install "graphifyy[sql]"` | | `all` | Все вищезазначене | `pip install "graphifyy[all]"` | --- diff --git a/graphify/skill.md b/graphify/skill.md index 6fa688c..50ecd0c 100644 --- a/graphify/skill.md +++ b/graphify/skill.md @@ -979,8 +979,9 @@ from pathlib import Path data = json.loads(Path('graphify-out/graph.json').read_text()) vocab = set() for n in data['nodes']: - for c in re.findall(r'[A-Za-z]+', n.get('label','') or ''): - for p in re.findall(r'[A-Z]+(?=[A-Z][a-z])|[A-Z]?[a-z]+|[A-Z]+', c): + for c in re.findall(r'[^\W\d_]+', n.get('label','') or '', re.UNICODE): + parts = re.findall(r'[A-Z]+(?=[A-Z][a-z])|[A-Z]?[a-z]+|[A-Z]+', c) or [c] + for p in parts: t = p.lower() if 3 <= len(t) <= 30: vocab.add(t)