From c2b1c2d1bd91b578aabc5253c2999635940354f6 Mon Sep 17 00:00:00 2001 From: ayushcodes10 Date: Thu, 17 Sep 2026 16:19:15 +0530 Subject: [PATCH 1/3] Name the installed platform in the completion message Bare graphify install silently defaults to claude, and the completion message named no platform at all. A user following a platform neutral quick start for a different assistant such as Codex or OpenCode saw an apparently successful, generic message while the skill for their actual assistant was still absent, with nothing pointing them at the platform flag. The message now names the platform it just installed and gives a reminder of the flag to use for a different one, with an example that is never the platform just installed. Co-Authored-By: Claude Sonnet 5 --- graphify/install.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/graphify/install.py b/graphify/install.py index 2fb2192760..cc29399b19 100644 --- a/graphify/install.py +++ b/graphify/install.py @@ -728,8 +728,19 @@ def install(platform: str = "claude", *, project: bool = False, project_dir: Pat if project: _print_project_git_add_hint([_project_scope_root(skill_dst, project_dir)]) + # #2263: bare `graphify install` silently defaults to claude, and the old + # completion message named no platform at all - a user following a + # platform-neutral quick start for e.g. Codex or OpenCode saw an + # apparently platform-neutral success message while the skill for their + # actual assistant was still absent. Name the platform explicitly, and + # give an example that is never the platform just installed. print() - print("Done. Open your AI coding assistant and type:") + print(f"Done. Installed the graphify skill for '{platform}'.") + example_platform = "codex" if platform != "codex" else "claude" + print(f"Wrong assistant? Re-run with e.g. `graphify install --platform {example_platform}`") + print("(see `graphify install --help` for the full platform list).") + print() + print("Open your AI coding assistant and type:") print() print(" /graphify .") print() From 279e72bb77ab21b7e1a2d35c2f7efd936e49d964 Mon Sep 17 00:00:00 2001 From: ayushcodes10 Date: Thu, 17 Sep 2026 16:19:41 +0530 Subject: [PATCH 2/3] Add a regression test for the platform naming completion message Asserts the completion message names the platform that was actually installed and that the wrong assistant example never suggests the same platform. Co-Authored-By: Claude Sonnet 5 --- tests/test_install.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/test_install.py b/tests/test_install.py index 72d4e4dd26..23318abb28 100644 --- a/tests/test_install.py +++ b/tests/test_install.py @@ -40,6 +40,28 @@ def test_install_default_claude(tmp_path): assert (tmp_path / ".claude" / "skills" / "graphify" / "SKILL.md").exists() +def test_install_completion_message_names_the_platform(tmp_path, capsys): + """#2263: the completion message must name which platform was installed, + and its "wrong assistant" example must never suggest the platform that + was just installed - so a Codex user following a platform-neutral quick + start (which defaults to claude) sees the mismatch instead of a generic + success message.""" + from graphify.__main__ import install + + old_cwd = Path.cwd() + try: + os.chdir(tmp_path) + with patch("graphify.__main__.Path.home", return_value=tmp_path): + install(platform="claude") + finally: + os.chdir(old_cwd) + + out = capsys.readouterr().out + assert "Installed the graphify skill for 'claude'." in out + assert "--platform claude" not in out + assert "--platform codex" in out + + def test_install_survives_a_winerror_17_replace(tmp_path, monkeypatch): """#3508: installing SKILL.md failed on some Windows setups with WinError 17 ("cannot move to a different disk drive") from `os.replace`, even with From dc7d6806314edda4db3f53541ae3d2c7392498af Mon Sep 17 00:00:00 2001 From: ayushcodes10 Date: Thu, 17 Sep 2026 16:19:41 +0530 Subject: [PATCH 3/3] Add changelog entry for issue 2263 Co-Authored-By: Claude Sonnet 5 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a0daf515f..1dceea3bb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ Full release notes with details on each version: [GitHub Releases](https://githu ## 0.9.63 (2026-09-16) +- Fix: `graphify install`'s completion message now names the platform it just installed for. Bare `graphify install` silently defaults to `claude`, and the old message named no platform at all — a user following a platform-neutral quick start for a different assistant (Codex, OpenCode) saw an apparently successful, generic message while the skill for their actual assistant was still absent, with nothing pointing them at `--platform` (#2263, thanks @Ranteck). + - Feature: Elixir `alias`/`import`/`require`/`use` targets now resolve onto the module's `defmodule` node across files, so the internal module dependency graph is no longer dropped as dangling. Only top-level modules are indexed (a nested `defmodule`, labeled with its bare inner name, cannot capture an unrelated `use ` from another file), and a same-file reference is left unresolved so it cannot clobber the structural `contains` edge (#3603, thanks @ayushcodes10). - Feature: a Rust `self.method()` call now resolves to a method defined on the same type in another file (the common split-`impl`-block layout), pooling methods across every `impl` of one type and refusing to link when two unrelated types share a bare name (#3602, thanks @ayushcodes10). - Feature: a Ruby member call `obj.foo` on a known-type receiver now resolves to a method `foo` inherited from a superclass, including across files, using the same conservative promotion as the implicit-self resolver — a single owning class, matching method kind, and one unambiguous ancestry chain, or it stays dangling (#3585, thanks @oleksii-tumanov).