# Reported issues for Quipu

Pod holds 5 of 5 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 [Quipu](/mcp/quipu).

## Most discussed

### graph: provenance-based work-item co-occurrence (ticket/epic ↔ code)

## Problem

Bobbin already computes **statistical** co-change: file-level correlation mined
from git history (FP-Growth) — "what *tends to* change together." That is a
retrieval signal and it stays in Bobbin.

There is a second, different notion of "co-change" that belongs in Quipu:
**governed, provenance-based co-occurrence at the work-item level.** Not a
statistical mine — a deterministic graph query over typed provenance edges:

- ticket `T` is closed by commits that touched governed…

[Read the thread](https://github.com/scbrown/quipu/issues/37) · 2026-07-18 · closed · 3 comments

### server: knotted entities are never embedded, so /context silently returns nothing

## Problem

A store populated with `quipu knot` has no embeddings, so `/context` returns an empty result —
successfully. There is no error anywhere in the path, and the response is indistinguishable from
"nothing in the graph matched your query".

```console
$ quipu knot alphax.ttl --db na.db
knotted 2579 facts from alphax.ttl (tx 1)

$ quipu stats --db na.db
facts (current): 2579   entities: 221   predicates: 22

$ curl -sX POST localhost:3030/context -d '{"query":"facility that improves…

[Read the thread](https://github.com/scbrown/quipu/issues/53) · 2026-07-29 · closed · 1 comment

### sparql: FILTER(?x IN (…)) is unsupported — rewrite to a disjunction

## Problem

The SPARQL 1.1 `IN` operator is rejected on quipu 0.3.11:

```console
$ curl -sX POST localhost:3030/query -H 'content-type: application/json' -d '{"query":
  "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
   SELECT ?label WHERE {
     ?f rdfs:label ?label
     FILTER(?label IN (\"Recycling Tanks\", \"Energy Bank\"))
   }"}'

{"error":"unsupported FILTER expression: In(Variable(Variable { name: \"label\" }), [Literal(Literal(String(\"Recycling Tanks\"))),…

[Read the thread](https://github.com/scbrown/quipu/issues/52) · 2026-07-29 · closed · 1 comment

### sparql: VALUES is unsupported — no way to batch a candidate set in one query

## Problem

`VALUES` is rejected by the evaluator on quipu 0.3.11:

```console
$ curl -sX POST localhost:3030/query -H 'content-type: application/json' -d '{"query":
  "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
   SELECT ?label WHERE {
     VALUES ?label { \"Recycling Tanks\" \"Energy Bank\" }
     ?f rdfs:label ?label
   }"}'

{"error":"unsupported graph pattern: VALUES ( ?label ) { ( \"Recycling Tanks\" ) ( \"Energy Bank\" )  }"}
```

`spargebra` parses it — the error comes from…

[Read the thread](https://github.com/scbrown/quipu/issues/51) · 2026-07-29 · closed · 1 comment

### CRITICAL: SPARQL FILTER(CONTAINS(...)) is a no-op — returns all rows regardless of predicate

## Severity: CRITICAL (silent wrong results / data-integrity risk)

`FILTER(CONTAINS(STR(?x), "literal"))` in a SPARQL query does **not filter** — it returns ALL matching rows regardless of the substring. Verified on the live store:

```
SELECT (COUNT(DISTINCT ?ep) AS ?n) WHERE { ?ep a prov:Activity FILTER(CONTAINS(STR(?ep),"graphiti-fact")) }  -> 241
SELECT (COUNT(DISTINCT ?ep) AS ?n) WHERE { ?ep a prov:Activity FILTER(CONTAINS(STR(?ep),"reactor")) }        -> 241
SELECT (COUNT(DISTINCT ?ep)…

[Read the thread](https://github.com/scbrown/quipu/issues/12) · 2026-06-27 · closed · 1 comment

## Most recent

The remaining reports are on [the project's issue tracker](https://github.com/scbrown/quipu/issues).
