Graphify-Labs/graphify · error · RuntimeError

graphify install is incomplete: missing always-on block '{ba

Error message

graphify install is incomplete: missing always-on block '{basename}' at {path}. Reinstall graphifyy (e.g. `uv tool install --reinstall graphifyy`).

What it means

Raised when the installer tries to read one of the packaged 'always-on' markdown skill blocks (graphify/always_on/<name>.md) and gets an OSError — file missing or unreadable. These blocks are human-edited fragments injected verbatim by _replace_or_append_section and drift-checked by `skillgen --check`; the error deliberately fires at use-time (not import-time) so a broken packaging job can't brick every CLI command, and names the reinstall command.

Source

Thrown at graphify/install.py:54

def _always_on(basename: str) -> str:
    """Read a packaged always-on instruction block from graphify/always_on/.

    The six always-on blocks (CLAUDE.md / AGENTS.md / GEMINI.md / VS Code
    Copilot instructions / Antigravity rules / Kiro steering) live as committed
    markdown next to this module, generated by tools/skillgen from a single
    human-edited fragment and guarded against drift by ``skillgen --check``. The
    installer injects them verbatim via ``_replace_or_append_section``, so the
    bytes here must match the former triple-quoted constant exactly — the
    always-on-roundtrip validator proves that.
    """
    path = Path(__file__).parent / "always_on" / f"{basename}.md"
    try:
        return path.read_text(encoding="utf-8")
    except OSError as exc:
        # Defer to use-time so a missing/corrupt packaged block can't crash module
        # import (which would brick every CLI command, not just install). Reached
        # only by an install/integration path that actually needs this block.
        raise RuntimeError(
            f"graphify install is incomplete: missing always-on block '{basename}' "
            f"at {path}. Reinstall graphifyy (e.g. `uv tool install --reinstall graphifyy`)."
        ) from exc
def _refresh_all_version_stamps() -> None:
    """After a successful install, update .graphify_version in all other known skill dirs.

    Prevents stale-version warnings from platforms that were installed previously
    but not explicitly re-installed during this upgrade.
    """
    for name in _PLATFORM_CONFIG:
        skill_dst = _platform_skill_destination(name)
        vf = skill_dst.parent / ".graphify_version"
        if skill_dst.exists():
            vf.write_text(__version__, encoding="utf-8")
def _platform_skill_destination(platform_name: str, *, project: bool = False, project_dir: Path | None = None) -> Path:
    """Return the skill destination for a platform and scope."""
    if platform_name == "gemini":
        if project:

View on GitHub (pinned to 7fe58b0b0f)

Solutions

  1. Reinstall the tool cleanly: `uv tool install --reinstall graphifyy` (or `pipx install --force graphifyy` / `pip install --force-reinstall graphifyy`)
  2. Verify the block exists afterwards: ls <site-packages>/graphify/always_on/ should show the named .md file
  3. If building from source, check packaging config includes the always_on package data and rebuild

Example fix

# before
graphify install   # RuntimeError: graphify install is incomplete: missing always-on block 'core' at ...

# after
uv tool install --reinstall graphifyy
graphify install
Defensive patterns

Strategy: validation

Validate before calling

from pathlib import Path
import graphify

always_on_dir = Path(graphify.__file__).parent / "always_on"
missing = [p.name for p in always_on_dir.glob("*.md")] 
if not missing:
    raise SystemExit(
        "graphify package data incomplete (no always_on blocks) - "
        "reinstall: uv tool install --reinstall graphifyy"
    )

Try / catch

try:
    from graphify.install import install_all
    install_all()
except RuntimeError as e:
    if "install is incomplete" in str(e):
        subprocess.check_call(["uv", "tool", "install", "--reinstall", "graphifyy"])
        install_all()
    else:
        raise

Prevention

When it happens

Trigger: Running `graphify install` (skill/platform installation) from an install whose package data is incomplete: a wheel built without the always_on/*.md files (exclusion filters, MANIFEST issues), a partially overwritten uv/pipx tool install, or filesystem-level deletion/corruption of those files.

Common situations: Upgrading a tool install that got interrupted mid-write; building from source with aggressive packaging excludes; container images copying site-packages selectively; permission damage making the .md unreadable.

Related errors


AI-assisted analysis of Graphify-Labs/graphify@7fe58b0b0f (2026-08-14). Data as JSON: /api/errors/137e7ad04743baef. Report an issue: GitHub.