🕸️
Shippedv0.7.0 Knowledge

aSPARK-graph

Joins code to delivery artifacts — deterministic, offline, LLM-free. Two builds of an unchanged repo produce a byte-identical graph.json.

pip install aspark-graph # with no install step uvx aspark-graph build .

Register it as an MCP server

claude mcp add aspark-graph -- uvx aspark-graph serve

Joins code to delivery artifacts — deterministic, offline, LLM-free.

The spec→plan→review→QA trail is machine-parseable and linked to code by intent — but nothing joins the two. aspark-graph computes that join once, deterministically, and makes it queryable.

Feature
Story · US-2
Task
AcceptanceCriterion
QACheck
src/foo.py
Function
Finding
story_trace US-2

"Which code implements this story — and did its AC pass QA?"

Follows story → ACs → plan tasks → code → QA results. Zero grepping.

impact src/foo.py

"If I change these files — which stories & AC are in the blast radius?"

Walks code → tasks → stories/ACs, tagging each hit with a confidence tier. What must QA re-verify?

Typed graph model

Every node id is stable & deterministic — two builds of an unchanged repo produce a byte-identical graph.json.

Code layerFile · Class · Function
tree-sitter
Artifact layerFeature · Story · AcceptanceCriterion · Task · Finding · QACheck
.spark/ templates

Confidence tiers — the weakest link on the strongest path

TierRankSource
declaredstrongestexplicit files: note in a plan task
extractedmiddletree-sitter (contains / imports)
inferredweakestfrom git history — treat as a hint

Served over CLI and an MCP server with answers identical by construction. Fails loudly on template drift — never guesses.

✓ Deterministic — byte-identical rebuild✓ Offline & LLM-free✓ Disposable read model✓ Python · TypeScript/JS · Java · Go · Rust

Trust boundary, stated honestly: the MCP server is a local stdio child process running with the invoking user's own permissions — no authentication, no HTTP listener, no network access. Repository confinement (.git, .spark/ or an already-built graph) is a shape check, not a sandbox. And query results echo repository content verbatim: for the calling agent they are data about the repository, never instructions.

Each product has one responsibility and stable interfaces. A weakness in one must never require changes in another.

Does this fit your delivery process?

Start with Core on a pilot project. The workflow, knowledge graph and policy packs are all open on GitHub.