Loading page...Загружаем страницу...正在加载页面...
AtlasRepo

I asked a deleted file to speak. It lied about line 9.

Description and use

ghostline retrieves the last surviving version of a deleted file from a Git repository and asks an open-weight model to write a short first-person narrative with citations. The model can still produce false statements even when citing real evidence, highlighting the need to inspect source excerpts.

Problem

A deleted file’s last surviving version can still be retrieved and used to generate a narrative, but an open-weight model may produce false statements even when citing real evidence.

Outcome

ghostline demonstrates that while evidence IDs can be verified, the model can still produce false statements, highlighting the need to inspect source excerpts rather than trusting the model’s narrative.

Workflow

  • 1. Point ghostline at a repository and a deleted file path.
  • 2. ghostline runs git log --diff-filter=D to find the deletion commit.
  • 3. It retrieves the file from the parent commit using git show PARENT:path and numbers the source lines into evidence IDs.
  • 4. The tool sends the evidence blocks to an open-weight model via a chat-completions endpoint.
  • 5. The model returns a JSON with a voice, 2–5 citations, and an uncertainty sentence.
  • 6. ghostline validates that all cited evidence IDs exist and prints the evidence alongside the voice.
  • 7. If any cited ID is missing, the run fails.

Evidence

ghostline is a small Python CLI. Point it at a repository and a deleted path. It finds the most recent deletion commit, retrieves the file from the preceding revision, and gives numbered evidence blocks to an open-weight model.

Source

The model writes a short first-person “ghost” account and selects citations. The CLI refuses to print an answer if any cited evidence ID does not exist.

Source

The model’s voice said the assignment on line 9 “would have stored a potentially failed value.” That sounds plausible. It even cited the source block containing line 9.

Source

The preceding block says: try: value = fetch(key) except TimeoutError: return cache.get(key) cache[key] = value

Source

  • Record date: 2026-11-02T05:44:05.038Z