<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Sanva Build Notes]]></title><description><![CDATA[Sanva Build Notes]]></description><link>https://sanva-build-notes.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Mon, 02 Nov 2026 15:59:53 GMT</lastBuildDate><atom:link href="https://sanva-build-notes.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[The retrieval test I want every note-taking app to pass]]></title><description><![CDATA[Ten synthetic notes and five query types to check retrieval, citations, timelines, and missing evidence in a personal knowledge workflow.]]></description><link>https://sanva-build-notes.hashnode.dev/the-retrieval-test-i-want-every-note-taking-app-to-pass</link><guid isPermaLink="true">https://sanva-build-notes.hashnode.dev/the-retrieval-test-i-want-every-note-taking-app-to-pass</guid><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[ahwai zhang]]></dc:creator><pubDate>Tue, 27 Oct 2026 09:47:36 GMT</pubDate><content:encoded><![CDATA[<p>Saving a note and finding it again are different problems. An exact search can miss a paraphrase; a semantic search can return a plausible note that answers a different question. Before choosing a search stack for a personal knowledge workflow, I would give it a small retrieval test.</p>
<p>If you are building or evaluating a personal knowledge management (PKM) workflow, you do not need an enterprise benchmark to evaluate retrieval dependability. A small, disciplined test suite of ten synthetic notes can expose fundamental retrieval blind spots in minutes.</p>
<h3>The 10 Synthetic Test Notes</h3>
<p>Start with the ten invented notes below. These are test fixtures, not records of my infrastructure, incidents, or research. Save each as a separate note with a stable identifier:</p>
<ol>
<li><strong>Note A (API Decision):</strong> "2026-03-12: Switched internal event bus from Redis to NATS Core to reduce idle memory."</li>
<li><strong>Note B (Reading Note):</strong> "Raft consensus simplifies Paxos by enforcing leader-driven log replication."</li>
<li><strong>Note C (Hardware Spec):</strong> "Workstation runs an M2 Mac mini with 16 GB unified RAM and 512 GB SSD."</li>
<li><strong>Note D (Recipe Draft):</strong> "Sourdough test #4: 72% hydration with 20% rye flour produced open crumb after 4-hour bulk ferment."</li>
<li><strong>Note E (Incident Postmortem):</strong> "2026-05-18: Database pool exhaustion caused by unclosed cursor in billing export."</li>
<li><strong>Note F (Travel Packing):</strong> "Essential travel gear: 65W GaN charger, USB-C to Lightning cable, offline voice recorder."</li>
<li><strong>Note G (Architecture Idea):</strong> "Decoupling read projections from the primary write store using SQLite replicas."</li>
<li><strong>Note H (Reading Summary):</strong> "Christopher Alexander on pattern languages: each pattern describes a recurring problem."</li>
<li><strong>Note I (Team Retro):</strong> "2026-08-04 retro: Standup moved to asynchronous Slack thread to protect morning focus."</li>
<li><strong>Note J (Home Network):</strong> "Home lab router on 192.168.10.1 with local DNS pointing to AdGuard Home."</li>
</ol>
<h3>The 5 Retrieval Query Categories</h3>
<p>Separate retrieval from answer generation: returning useful source notes and composing a faithful answer are different checks. For a search-only tool, inspect the source notes yourself; for an answering tool, also inspect its citations. Test your pipeline against five distinct query categories:</p>
<ol>
<li><strong>Exact Keyword Match:</strong> Query: <em>"NATS Core"</em>. Target: Note A at rank 1.</li>
<li><strong>Paraphrase Match:</strong> Query: <em>"Which breakfast bread test yielded an airy crumb?"</em>. Target: Note D without requiring an exact phrase match.</li>
<li><strong>Source Attribution:</strong> Query: <em>"Who wrote about patterns recurring in design?"</em>. Target: Note H, extracting the author name.</li>
<li><strong>Temporal Ordering:</strong> Query: <em>"Did standup move to Slack before or after the billing incident?"</em>. Target: Retrieve Notes E and I to resolve chronological sequence.</li>
<li><strong>Insufficient Evidence (Unanswerable):</strong> Query: <em>"What is our Postgres backup policy?"</em>. Target: Explicit negative response without hallucination.</li>
</ol>
<h3>Evaluation Metrics and Verification Checks</h3>
<table>
<thead>
<tr>
<th>Query Category</th>
<th>Evaluation Focus</th>
<th>Suggested Metric</th>
<th>Passing Criteria</th>
</tr>
</thead>
<tbody><tr>
<td>Keyword Match</td>
<td>Precision on exact identifiers</td>
<td>Top-1 Accuracy</td>
<td>Exact note returned at rank 1</td>
</tr>
<tr>
<td>Paraphrase Match</td>
<td>Concept retrieval across vocabulary gaps</td>
<td>Recall@3</td>
<td>Target note present in top 3 results</td>
</tr>
<tr>
<td>Source Attribution</td>
<td>Extracting specific named entity</td>
<td>Extraction Accuracy</td>
<td>Correct entity identified with note citation</td>
</tr>
<tr>
<td>Temporal Ordering</td>
<td>Cross-note date resolution</td>
<td>Multi-hop Precision</td>
<td>Both dated notes retrieved without distractor dates</td>
</tr>
<tr>
<td>Insufficient Evidence</td>
<td>Refusal when evidence is absent</td>
<td>Rejection Rate</td>
<td>Explicit negative response; zero false positives</td>
</tr>
</tbody></table>
<h3>Scope and Limitations</h3>
<p>This framework represents a proposed evaluation methodology for personal knowledge retrieval, not a report of measured results or a benchmark of any shipped production app. Real-world notes are noisier, longer, and frequently updated. However, establishing ground truth on a small synthetic corpus clarifies whether your retrieval pipeline fails at lexical matching, semantic ranking, or hallucination prevention. One example per category is a smoke test, not a reliable percentage score. Keep the fixtures fixed, record the returned note IDs and ranks, and rerun after changing chunking, embeddings, or ranking. Expand the query set before comparing rates. For a broader research benchmark, see <a href="https://arxiv.org/abs/2104.08663">BEIR (Thakur et al., 2021)</a>.</p>
<h3>About the Project</h3>
<p>I build Sanva, an independent product studio. Lumo: AI Memory is listed in the US App Store. If personal note workflows interest you, <a href="https://memorycopilot.sanva.top/">see Lumo at Sanva</a>. The evaluation above is a proposed method, not a claim that Lumo has passed it; availability and pricing follow the current store listing.</p>
]]></content:encoded></item></channel></rss>