Skip to content

Never Stale Live Reconstruction

Rafael Fragoso edited this page Jun 8, 2026 · 2 revisions

Never Stale: Live Reconstruction

The single most important property of Columbus:

It cannot go stale, because it never stores your code.

The database holds metadata, git anchors and embedding vectors only — never your code. Every snippet and exact line range is rebuilt at query time by re-parsing the working tree; the vectors are a derived retrieval index, not your source. The answer always matches the code as it is right now.

See it yourself

Index a project, then look at a symbol:

$ columbus show symbol parseConfig
1. parseConfig [function]  src/config.ts:4-6

Now insert two blank lines at the top of src/config.ts and do not reindex:

$ columbus show symbol parseConfig
1. parseConfig [function]  src/config.ts:6-8

The range moved from 4-6 to 6-8 on its own. A tool that cached code (or a vector index of embeddings) would have returned the old lines until you re-embedded. Columbus reconstructs from the live file every time.

Why this matters for agents

A coding agent acts on what context tells it. Stale context is worse than no context — it's confidently wrong. If the agent is told a function lives at lines 4–6 but it has moved, an edit lands in the wrong place. Live reconstruction makes that class of error structurally impossible.

What about the index, then?

The index can lag the working tree (you added a file, haven't reindexed). That affects discovery — whether a brand-new symbol is found yet — but never the accuracy of a result you do get back. Freshness is surfaced explicitly:

$ columbus graphs
...
index: fresh, last indexed 2026-06-07T12:31:18Z

The --json projection includes a freshness block (indexed_head, dirty, last_indexed_at, stale) so an agent can decide whether to reindex. Keeping it current is cheap and incremental — see Keeping the Index Fresh.

Memory drift is detected, not hidden

Durable memories carry evidence anchors (e.g. src/config.ts:4-6). When the underlying code changes, the mismatch surfaces as a drift warning on the item instead of silently lying:

$ columbus show memory mem_001
mem_001 [decision] Default port is 8080
  evidence src/config.ts:4-6  (stale: anchor moved)

Drift is always a warning, never fatal — see Project Memory.

Related

How Columbus Works · Determinism & Local-Only

Clone this wiki locally