Pod

Available as Markdown and JSON. Pod is also available over MCP.

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).