git séance: I asked the ghost of `request` why it died, and made it cite its sources
Description and use
git séance builds a graph of the abandoned request repository’s issues, PRs, comments, and commits, then uses a local Gemma 4 model to answer questions, ensuring every claim is cited with an existing issue or commit.
Problem
Inherited or depended on an abandoned Node.js HTTP library and needed to understand historical design decisions before modifying it.
Outcome
The system achieved 9/10 correct answers with 9/10 correct citations using a combined graph + vector retrieval approach, outperforming plain vector search (8/10).
Workflow
- 1. Ingest GitHub issues, PRs, comments via API and commits via a blobless clone.
- 2. Build node tables (Thread, Comment, Commit) and relationship tables (REPLIES, MENTIONS, REFERS, PART_OF).
- 3. Embed nodes with nomic‑embed‑text and store in LanceDB.
- 4. Query graph with Lance‑Graph Cypher to retrieve relevant threads, comments, and commits.
- 5. Feed retrieved evidence to Gemma 4 model to generate an answer.
- 6. Apply regex to verify each citation matches retrieved evidence, dropping invalid ones.
- 7. Return answer with valid citations.
Evidence
git séance lets you ask that history a question. A local open-weight model (Gemma 4 through Ollama) answers as the project's ghost, but it may only speak from the history: every claim cites an issue ([#3142]) or a commit ([b66e4cd]), and the code removes any citation that isn't in what was actually retrieved.
The first project summoned is request, the Node.js HTTP library that went into maintenance mode in 2020: 3,477 issues and pull requests, 12,441 comments and 2,290 commits.
Gemma 4 E4B, about a minute per answer on a 6 GB GTX 1660 Ti.
- Record date: 2026-11-01T08:44:18.199Z