Reported issues for graphy
Pod holds 16 of 16 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.
Back to graphy.
Most discussed
A rebuild takes the MCP door down for its whole run: clear removes the served store and nothing serves until build lands
What
Measured by the first tenant's Windows production seat, 2026-09-13. While a roster rebuild is in flight, the MCP server refuses to start:
graphy mcp --repo .
MCP REFUSED: no compiled store for roster [...] rc=2, 0.4s
The window is the whole rebuild, 314.7 s on that box (a 32-lane roster, 177,222 nodes / 460,249 edges). Measured by starting the server mid-rebuild (refused), then after GRAPHY_REBUILD OK (connected), with nothing else changed.
Why it is worse than…
Read the thread · 2026-09-13 · open · 1 comment
shell install writes only POSIX hooks, so on a host with no bash every hook it wires fails to execute
Measured by the first client on a Windows Server production box while running #88's bullets against graphyos 0.2.4, and confirmed from the engine seat.
What
graphy shell install ships and wires only POSIX hooks:
graphy/shell/hooks/session_start.sh
graphy/shell/hooks/session_end.sh
graphy/shell/hooks/before_edit.sh each beginning #!/usr/bin/env bash
Those three paths go into .claude/settings.json as the hook commands. **On a stock Windows box with no bash on PATH,…
Read the thread · 2026-09-13 · open · 1 comment
A module named outside the dotted identifier (a backtick, a hyphen) eats green and then showcase dies with a stack at the partition check — refuse on one line or carry the name
The number
Found on the live run for graphyos #40. A TypeScript repo with a module named ```.ts (any name that is not a dotted identifier — a hyphen, a space, a backtick) eats green and then graphy showcase . --no-provision dies with a stack, exit 1, no SHOWCASE REFUSED line:
EAT OK: hostile + 0 ring shard(s) -> …/hostile/.graphy (3 of 3 files parsed, 0.1s)
SHOWCASE: one pillar — corpus 'hostile' has no orchestrator at depth 2 — …
Traceback (most recent call last):
……
[Read the thread](https://github.com/omnislash157/graphyos/issues/46) · 2026-09-08 · closed · 1 comment
### The private-marker hashes are public and reversible by wordlist: two of seven recovered in milliseconds — the scrub keys its hashes with a key that never travels
## The number
Red-team finding 4 (RECON §71). `.private_markers.sha256` is tracked in the public repo; `scrub.py:31-33` hashes each private word as an unsalted sha256 of its lowercase alphanumerics. A 21-word guess list built from public facts recovered 2 of the 7 markers in milliseconds. Anyone with a company-name wordlist can do the same.
## The change
The scrub keys its hashes: HMAC-SHA256 with a key that lives only in a gitignored file on the operator's box (`.private_key`, like…
[Read the thread](https://github.com/omnislash157/graphyos/issues/44) · 2026-09-07 · closed · 1 comment
### A file named with backticks breaks out of the showcase comment's fence — escape the text page for the fence
## The number
Red-team finding 7 (RECON §71), not reproduced. `showcase-on-issue.yml:41` wraps `showcase.txt` in a ```` ```text ```` fence and `showcase.py` prints module and arm names verbatim into it. A TypeScript repo with a file named `` ```.ts `` (module names are not slug-checked) closes the fence and injects Markdown or HTML into a bot-authored comment.
## The change
`showcase.txt` is written for the fence: any line that would close it (three backticks at the start, after whitespace) is…
[Read the thread](https://github.com/omnislash157/graphyos/issues/40) · 2026-09-07 · closed · 1 comment
### check says fresh and showcase says 0.0s against uncommitted edits: the cursor is the HEAD alone — the working tree's dirt joins the cursor
## The number
Red-team finding 6 (RECON §71). `cli.py:1290-1292` sets the tenant cursor to `git HEAD`; `showcase.py:150-155` skips the eat whenever `.graphy/tenant.json` exists. Reproduced: a function appended to `src/click/core.py` (uncommitted), then `graphy check` → `CHECK OK … store fresh`, `graphy showcase .` → `SHOWCASE OK … 0.0s`, `graphy blast <the new function>` → "names no node". A newcomer iterating on the working tree sees a stale page and a green audit; the `0.0s` is the only tell.…
[Read the thread](https://github.com/omnislash157/graphyos/issues/39) · 2026-09-07 · closed · 1 comment
### A syntax error, a latin-1 file or deep nesting mints nothing and still counts as parsed — name the unreadable files in the mint line and the receipt
## The number
Red-team finding 5 (RECON §71). `python_ast.py:325-332` returns no record on `UnicodeDecodeError` or `SyntaxError`, and the mint still counts the file as parsed. Reproduced: a package with `broken.py` (a syntax error), `latin.py` (`# coding: latin-1`, one real `def`) and `deep.py` (300 nested parentheses, one `def`) → `MINT OK: badpkg 4 nodes / 2 edges (parsed 7 of 7 files)`; PROVENANCE lists the three with `nodes: 0`. A codebase with one latin-1 module loses it and the walk says…
[Read the thread](https://github.com/omnislash157/graphyos/issues/38) · 2026-09-07 · closed · 1 comment
### The re-mint splice trusts a shard on disk byte-for-byte: a planted edge survives MINT OK · BUILD OK · CHECK OK — the payload must hash to its PROVENANCE before a splice
## The number
Red-team finding 3 (RECON §71). The re-mint splice (`smash.py:281-325`) reuses a shard's records whenever PROVENANCE's per-source-file sha256 and producer block match; it never checks the shard payload against `PROVENANCE.files`. Reproduced: one `imports` edge in `click_graph/edges.json` edited to `dst: click://module/click.PLANTED`, then `graphy eat . --site-packages …` → `MINT OK: click 608 nodes / 3174 edges (parsed 0 of 17 files)`, `BUILD OK`, `CHECK OK`, and the planted row…
[Read the thread](https://github.com/omnislash157/graphyos/issues/36) · 2026-09-07 · closed · 1 comment
## Most recent
### a project .mcp.json's relative paths resolve against the launch directory — graphy mcp --repo . fails from a subdirectory
Measured 2026-09-13 while closing #82.
## What
A project `.mcp.json` resolves a relative `command` and a relative argv against the directory the client was **launched** from, not the project root. The block `eat` prints (after #82: `.venv/bin/graphy` · `mcp --repo .`) connects when Claude Code starts in the repo root and fails when it starts in a subdirectory. The plugin form (`--repo ${CLAUDE_PROJECT_DIR}`) failed from the subdirectory too.
Evidence: a scratch clone of…
[Read the thread](https://github.com/omnislash157/graphyos/issues/99) · 2026-09-13 · open · 0 comments
### The MCP face never re-checks freshness: a server pins its boot-time store and answers confidently from a stale one the CLI refuses
## What
Measured by the first tenant's Linux seat, 2026-09-13. One tenant, one store, two faces, the same minute:
```text
graphy history <term> --tenant <t> --tenant-id <id>
HISTORY REFUSED: compiled store … is STALE: it serves generation af80ea470d711e53 but the live shards digest to a03bfc505e618519. A query never rebuilds one …
MCP `hunt`, same tenant, ~30 s later
answered normally: no refusal, no warning, no staleness line
The MCP server's own instructions announced a third…
Read the thread · 2026-09-13 · open · 0 comments
Every door verb still prints an unexpected OSError as a refusal: the #78 defect in nine more handlers
What
graphyos #78 fixed build. Before the fix, build printed an unexpected platform OSError in a refusal's shape (BUILD REFUSED: [Errno 9] Bad file descriptor), with no path, operation or frame. The adversarial review of that rung found the same catch in other verbs. Each one folds OSError into its ... REFUSED: / ... UNANSWERABLE: print alongside the engine's own error types. The review named these engine/graphy/cli.py lines at commit time: 322, 367, 456, 590, 633, 682, 749,…
Read the thread · 2026-09-13 · open · 0 comments
A function referenced as a value mints no edge, so blast answers zero for all 26 CLI verbs and every callback in every roster
Found by dogfooding this engine on this engine — the operator's point that we should be walking our own repo before editing it, taken seriously for the first time this session.
What
python_ast mints a calls edge when a function is called. It mints nothing when a function is referenced as a value. So every function reached through a dispatch table, a registry, a callback or a decorator argument has no inbound edge, and blast answers a confident zero for it.
The engine's own…
Read the thread · 2026-09-13 · open · 0 comments
hunt is an MCP tool with no CLI twin, and it is the first door the docs tell a reader to try
Found by the first client on their Windows box while measuring #88, and confirmed from the engine seat.
What
hunt is the first tool in the MCP server's list (mcp.py:31) and the first door named in the orientation a reader is handed. It is not a CLI verb:
$ graphy hunt <term>
graphy: error: argument {eat,init,smash,history,converge,build,container,estate,walk,bridge,arms,
farm,draw,showcase,harness,traversals,descend,blast,explain,pillars,refresh,mcp,push,pull,index,…
[Read the thread](https://github.com/omnislash157/graphyos/issues/92) · 2026-09-13 · open · 0 comments
### Eating a stranger's repo runs its build (pip install <repo>) and the README does not say so — say it, and --no-provision mints without installing anything
## The number
Red-team finding 2 (RECON §71). `graphy eat <repo>` and `graphy showcase <url>` provision by `pip install <repo>` (`provision.py:83`; `npm install --ignore-scripts` at line 51 — pip has no such flag), which runs the repo's build backend and every sdist dependency's. README §"Install, then eat" says "provisions the repo's own dependencies beside it" and shows `graphy showcase https://github.com/encode/httpx.git` — a newcomer does not learn they just executed that repo's build…
[Read the thread](https://github.com/omnislash157/graphyos/issues/35) · 2026-09-07 · closed · 1 comment
### The showcase workflow hands any GitHub account code execution on the runner with a live issues:write token — the showcase runs in its own job without the token or this repo's checkout, and posts from a second job
## The number
Red-team finding 1 (RECON §71). `.github/workflows/showcase-on-issue.yml` runs `graphy showcase <url>` for any https github/gitlab url an opened issue names. `showcase` clones the repo and `provision.py:83` runs `pip install <repo>` — the repo's build backend runs as the runner user. `actions/checkout@v4` keeps `persist-credentials` at its default, so the workflow's `GITHUB_TOKEN` (`contents: read`, `issues: write`) sits in `$GITHUB_WORKSPACE/.git/config`, readable by that code.…
[Read the thread](https://github.com/omnislash157/graphyos/issues/34) · 2026-09-07 · closed · 1 comment
### graphy draw: the codebase drawn mechanically from the store — the module graph, an arm, a symbol's neighbourhood — as ASCII in the terminal and a self-contained HTML+SVG page; the sugiyama engine brought up to the host's (fan-bus routing, the html emitter, the check); an MCP draw tool
## What
`engine/graphy/sugiyama.py` is the older vendored copy of the operator's layered-layout engine: layout + ASCII render + `from_graph` (a shard load) + a DSL. The host's tool went on: fan-bus combs and a channel router that untangle the ASCII, an `--emit html` backend that renders the computed layout as one self-contained two-skin HTML+SVG page (`--interactive` click-focus reachability), and a `--check` done-token over the artifact. None of it reaches the product, and `from_graph` reads…
[Read the thread](https://github.com/omnislash157/graphyos/issues/2) · 2026-09-06 · closed · 1 comment
The remaining reports are on [the project's issue tracker](https://github.com/omnislash157/graphyos/issues).