Honor GRAPHIFY_OUT in installed docs and IDE plugins - #2720
Conversation
Cursor/Devin rules, the always-on CLAUDE.md/AGENTS.md/etc blocks, the Antigravity MCP config example, and the Kilo/OpenCode plugin's existsSync check all hardcoded "graphify-out", so a custom GRAPHIFY_OUT (relative or absolute) was silently ignored and the graph was never found. Fixes Graphify-Labs#2571.
There was a problem hiding this comment.
Graphify reviewed this change.
Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).
Formal verification. No changes could be formally verified in this run.
Graphify review — findings
This PR adds output-directory awareness to the installer so that generated docs, IDE rules, MCP config examples, and editor plugins reference the configured GRAPHIFY_OUT location instead of the hardcoded default graphify-out. It introduces three helpers (_out_doc, _mcp_out_path_display, _js_graph_exists_expr) that rewrite the default path name, and applies them to the always-on block reader, the Antigravity MCP example, and the Cursor/Devin/Kilo/OpenCode rule and plugin templates. The JS plugin templates use a placeholder token that is substituted with the computed existsSync expression to handle both relative and absolute output paths.
No blocking issues surfaced. 4 lower-confidence candidates did not survive cross-model review.
Analysis details — impact, health, verification
Impact & health
Graphify review
Impact — 371 functions depend on the 145 functions this change touches.
Health — grade B; 10 existing hotspot(s) in the area this change touches (pre-existing, not introduced here):
dispatch_command()— 2 callers, 117 callees (high)codebuddy_install()— 20 callers, 5 callees (high)claude_install()— 19 callers, 4 callees (high)gemini_install()— 10 callers, 7 callees (high)claude_uninstall()— 17 callers, 4 callees (high)_project_uninstall()— 5 callers, 13 callees (high)dispatch_install_cli()— 2 callers, 31 callees (high)codebuddy_uninstall()— 14 callers, 4 callees (high)- …and 2 more
Verification — 371 functions in the blast radius were not formally verified this run (proofs are advisory here).
Gate & verification
graphify gate
PASS — objectively clean (no health regressions, tests not run — proofs not run this pass (advisory)). Grounded, not self-assessed.
Advisory (not blocking):
- verification_scope: 247 function(s) in the blast radius were not formally verified this run
Formal verification
Could not verify: Could not verify \_always\_on.
The verifier did not have enough to check \_always\_on, so it is saying so rather than guessing. No false assurance is the whole point.
Guarantee: No guarantee either way, this is an honest abstention, not a pass.
Note: Reason: not verifiable: all 23 sampled inputs raised on both versions — the function never executed, so 'no divergence' would be vacuous (mostly NameError — names the real obstacle, not a sampling gap)
Could not verify: Could not verify \_antigravity\_install.
The verifier did not have enough to check \_antigravity\_install, so it is saying so rather than guessing. No false assurance is the whole point.
Guarantee: No guarantee either way, this is an honest abstention, not a pass.
Note: Reason: parameter `project_dir` is annotated `Path` — outside the synthesizable primitive/collection set
Cursor/Devin rules, the always-on CLAUDE.md/AGENTS.md/etc blocks, the Antigravity MCP config example, and the Kilo/OpenCode plugin's existsSync check all hardcoded "graphify-out", so a custom GRAPHIFY_OUT (relative or absolute) was silently ignored and the graph was never found. Fixes #2571.