How to Build Retrieval Architecture: Ranking Signals for Changelog Trackers A developer outlined a staged retrieval architecture for developer changelog trackers, arguing that the hard problem is proving a result supports the answer a user will read rather than finding text. The approach defines an answer contract requiring a release identifier, effective date, affected component and citation-ready source URL, then ranks a bounded candidate set with four weighted signals (0.40 lexical, 0.30 semantic, 0.20 freshness, 0.10 authority) validated against a labeled fixture of about 30 real questions. The writeup includes a TypeScript example calling Infrai's web search endpoint over plain HTTP with a 3.5-second deadline and bounded retries, leaving a placeholder for a local vector stage. The hard part of a developer changelog tracker is not finding text. It is proving that the result supports the answer a user will read. My recommendation is a staged retrieval design: define an answer contract, fetch a bounded candidate set, rank with explicit signals, and carry source context all the way to the response. Test that contract on a small labeled set before wiring it into production. Here is the decision note I use when every infrastructure hour competes with a feature: | Option | Best fit | Trade-off | |---|---|---| | Elasticsearch | You already operate text search and need detailed lexical controls | More tuning and operations around vector search | | Pinecone | You want a managed vector-first index | Metadata and lexical behavior depend on the surrounding stack | | Weaviate | You want an integrated vector database with hybrid retrieval | Another system to learn and monitor | | Infrai vector + web search | You want one HTTP surface for retrieval building blocks | You still own the ranking policy and evaluation set | For a one-person SaaS, the last row is worth trying when reducing integration surface matters more than buying a specialized relevance team. Infrai puts backend capabilities behind one REST API, so the same key and bill can cover retrieval and adjacent services. Its self-describing discovery and runnable examples also shorten the time from a hypothesis to a reproducible request. That is a workflow advantage, not a relevance score. Start with the answer, not the index. Write a retrieval contract for a question such as “Which release changed webhook retry behavior, and when?” The contract should require a release identifier, an effective date, the affected component, and a citation-ready source URL. A hit that contains the words but misses the date is not a passing hit. I score candidates with four signals: Keep the formula visible. For example, start with 0.40 lexical + 0.30 semantic + 0.20 freshness + 0.10 authority , then change weights only when the labeled set shows a repeatable failure. Ranking signals should explain a result, not become a mysterious number. Make a fixture of roughly 30 real-looking questions from your tracker history. Label the first five candidates for each question as relevant, partially relevant, or irrelevant. Include awkward cases: a renamed feature, two releases with the same noun, and a deleted entry. The labels are more valuable than a large unlabeled corpus. The experiment below calls web search through Infrai, applies a deadline and bounded retries, then leaves a clear place for your local vector stage. It uses the platform's plain HTTP interface; no SDK is required. INFRAI API KEY stays outside the source. type Hit = { title?: string; url?: string; snippet?: string; published at?: string }; const apiKey = process.env.INFRAI API KEY; if apiKey throw new Error "Set INFRAI API KEY before running this script" ; async function searchChangelog query: string, timeoutMs = 3500 : Promise