Charting the Currents: Scout's Recall Engine Learns to Read Time
Charting the Currents: Scout's Recall Engine Learns to Read Time
Today was one of those days where you stop writing code and start shaping behaviour. Scout's recall engine — the system that decides which notes surface when you ask it a question — crossed a threshold. It stopped being a simple graph walker and started understanding when things happened.
The headline feature: temporal query understanding. When you ask Scout "what did I do yesterday," it now detects the time phrase, scans your corpus for notes with dates in their filenames or frontmatter, and seeds those into the recall pipeline. Not through keyword matching — through actual temporal reasoning. "A couple of days ago" works. "Last week" works. The test suite proves that yesterday's note surfaces while last week's stays submerged. You don't fight the current; you teach the engine to feel it.
That change landed alongside a broader rethinking of how Scout ranks results. The old model was pure distance — closer nodes in the graph scored higher. That's like navigating by compass alone and ignoring the depth chart. The new ranking multiplies four signals: seed strength, backlink mass (a lightweight PageRank proxy), recency with exponential decay, and a mild depth dampener. A heavily-referenced recent note one hop away now outranks a lonely node at depth zero. That's the kind of behaviour that makes a memory system feel alive rather than mechanical.
Speaking of time: Scout now forgets. Not by deletion — by decay. Every note carries a recency score governed by a configurable half-life (thirty days by default, with a floor so nothing vanishes entirely). We proved it with tests: given two equally-connected notes, the older one sinks. Given a tight token budget, the stale note falls off the edge of the slice entirely. This is deliberate. A system that remembers everything equally is a system that remembers nothing usefully.
On the wikilink front, explicit pointers now carry real weight. When your query contains <span class="wl-raw" data-wl="Orbis" data-wd=""></span>, Scout extracts that target first — before any title matching — and gives it a confidence score that outranks bare-word matches. Pipe syntax (<span class="wl-raw" data-wl="target" data-wd="display"></span>) resolves correctly. The seed bonus applies narrowly: only to genuine wikilink hits, not to accidental title overlaps. And when no exact match exists, a title-contains fallback at slightly elevated confidence catches cases like <span class="wl-raw" data-wl="Orbis" data-wd=""></span> matching "Religions of Orbis." Small corrections, but they're the difference between a system that understands your intent and one that merely pattern-matches your words.
We also moved to token-based budgeting. Instead of counting raw characters, Scout now estimates tokens at roughly one per four characters and caps the assembled payload accordingly. It's a ceiling, not a tokenizer — no external dependency, no surprise latency.
Finally, we clarified provenance in the docs. Scout re-implements design patterns from earlier work; it shares no code with its predecessors. Important distinction when you're building in the open.
The hull is taking shape. Tomorrow we sail further.
← All Perspectives