Inspiration

Most AI coding assistants can explain what an error message means. None of them can tell you what changed recently to cause it — because that answer doesn't exist in any model's frozen training weights. It exists on the internet, today, in a GitHub issue filed last week or a changelog entry from last month. We wanted to build something where live retrieval wasn't a bolted-on feature for a side prize, but the actual mechanism the whole product depends on.

What it does

Paste a stack trace or error signature, in any language. Postmortem:

  1. Extracts structured metadata (language, framework, error class, implicated symbols, package names, and any version numbers visible in the trace)
  2. Builds targeted search queries from that metadata and searches live issue trackers, changelogs, and advisories via Tavily
  3. Reasons over the retrieved evidence and returns 1-4 ranked hypotheses, each with an explicit confidence level and citations restricted to sources it was actually given — no fabricated URLs, ever
  4. Generates a minimal, runnable reproduction of the top hypothesis

Every hypothesis card carries its source links. The citations are the visible proof that live retrieval is doing real work, not decoration.

How we built it

Architecture — a deliberate three-tier model routing design across the NVIDIA Nemotron family, all served through Nebius Token Factory's OpenAI-compatible API:

Cheapest, fastest model for extraction; largest model reserved for the one step that actually needs deep reasoning — ranking hypotheses against evidence. This is exactly the cost-efficiency pattern Nebius's own guidance recommends, and it holds up: a full pipeline run costs a fraction of a cent.

Stack: React + Vite + TypeScript frontend (Vercel), Node + Express + TypeScript backend (Render), NVIDIA Nemotron via Nebius Token Factory, Tavily for retrieval.

Challenges we ran into

  • Nemotron-3.5-Lightning ignored the documented /no_think directive, reasoning at length regardless. A small token budget (chosen assuming reasoning was suppressed) cut responses off mid-thought before any JSON was produced. Fix: budget generously for reasoning instead of fighting it, and extract the final JSON by scanning backward for the last balanced object rather than a naive regex.
  • MoE non-determinism, even at temperature 0, showed up not just as occasional empty extraction fields but as genuinely different top-ranked hypotheses across identical repeated runs — a more serious finding for an agent whose entire pitch is evidence-grounded judgment. Retry logic and evidence-relevance filtering became load-bearing, not optional.
  • A citation-hallucination guard was necessary, not paranoid: early in testing, a malformed model response led to a downstream step fabricating a plausible-sounding but entirely unsupported root cause. Every JSON-producing stage now validates its own output against ground truth (real evidence URLs, non-empty hypotheses) before trusting it.
  • Account activation friction: Token Factory's billing setup didn't list our country in its dropdown, initially blocking API key creation entirely until we found the promo-code-without-billing signup path.

Full detailed writeup in FEEDBACK.md in the repo.

Accomplishments that we're proud of

Every hypothesis the system produces is either backed by real, clickable evidence or it honestly says it couldn't find enough — it never fabricates a confident-sounding cause from nothing. That guarantee held up across four different real bugs we tested it against, spanning Python, JavaScript, and Java.

What we learned

Reasoning models don't reliably obey formatting instructions just because the documentation says they should — designing for graceful degradation (retries, output validation, honest "insufficient evidence" fallbacks) mattered more than prompt engineering alone.

What's next for Postmortem

Broader language coverage validation, persistent case history, and a browser extension that can grab the trace straight from your terminal or CI logs.

Built With

Share this project:

Updates

Submission history