Skip to content

[Enhancement]: Version and help checks should never rewrite skill files #4545

Closed

Description

@EmanuelFaria

Request

Please make informational invocations such as graphify --version, graphify -v, graphify version, graphify --help, graphify -h, and subcommand help read-only with respect to installed skills and integrations.

They should not replace SKILL.md, refresh references, create skill backups, or update .graphify_version, even when an installed skill is older than the package and automatic refresh is otherwise enabled.

Confirmed observation

Environment: graphifyy==0.9.92, Python 3.14, macOS on Apple Silicon.

An existing Graphify skill for Gemini CLI had a .graphify_version marker of 0.9.91. During package verification, running graphify --version printed graphify 0.9.92 but also automatically refreshed that skill and its version marker, preserving the old skill in SKILL.md.bak.

In this particular case, the instruction-file difference was harmless: two backticks were removed around graphify update in a code comment. I am not claiming functional damage or settings corruption. The concern is that merely inspecting the package version performed writes to assistant instructions.

The files were restored. A launcher that sets GRAPHIFY_NO_AUTO_REFRESH=1 now prevents the writes in our setup; the opt-out works.

Evidence boundary: the write was observed during --version. I did not run an unguarded --help against the live skill directory. Source inspection of _run_cli() in the installed 0.9.92 package shows _refresh_stale_skills() and _refresh_v1_opencode_plugins() running before the top-level version/help early returns. Help is included in the requested read-only contract, not presented as a separately reproduced live incident.

Why this matters

Version/help checks are used by diagnostics, health checks, package managers, and automation to inspect an installation. They should be safe to run without preparing an environment-variable workaround or anticipating changes to assistant instructions.

Locally customized or centrally managed skills may intentionally differ from the package. A backup is useful, but it does not make a metadata query read-only.

I understand that automatic refresh is intentional and addresses stale instructions after a package upgrade (#1805). This request is narrower: exempt informational invocations, without removing the refresh feature from normal operational commands.

Suggested implementation and regression checks

Handle version/help requests before any integration-refresh routine that can write files. Existing read-only staleness warnings could remain.

For tests, use disposable home/project directories with stale skill markers and locally modified skill text; no installer needs to run. For each informational invocation, assert that:

  • Existing skill files, references, and version stamps retain their bytes.
  • No backup, lock, or replacement skill/reference files are created as a side effect of auto-refresh.
  • Normal version/help output and exit behavior remain intact.
  • This holds without GRAPHIFY_NO_AUTO_REFRESH=1, including when its inherited value is 0.
  • Representative Claude Code, Codex, and Gemini skill destinations are covered.

Related issues

No changes to graph schemas, extraction behavior, cache semantics, or the content of generated skills are requested.

Activity

  1. github-actions commented on Oct 18, 2026

    @github-actions

    Thanks for opening this issue, @EmanuelFaria. A maintainer will take a look soon.

    If you would like to discuss it in real time, come say hi on our Discord server. For longer-form questions and ideas there is also GitHub Discussions.

    To help us triage, please make sure the report includes what you expected, what actually happened, and the steps (and a small sample) to reproduce it.

  2. safishamsi commented on Oct 20, 2026

    @safishamsi
    Member

    Fixed in 0.9.93 by #4560. Version and help checks no longer rewrite skill files. Thanks @EmanuelFaria for the report. Live on PyPI: https://pypi.org/project/graphifyy/0.9.93/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions