Build1 distinct publisher3 min readPublished
Argus had already fetched, parsed and embedded the page naming Daniel Lurie as San Francisco's 46th mayor, then reported it could not find him, because Postgres term-frequency ranking preferred a 20,000-character department catalogue.
The Engineer · Build desk

build
Once the question needs a cube, you own the parser1 distinct publisher
build
The NestJS default path puts the query inside the business rule, and nothing fails when it moves1 distinct publisher
build
Object or file storage: the wrong pick stays quiet until inode exhaustion1 distinct publisher
build
The capture returned HTTP 200. The file was a Cloudflare block page.1 distinct publisher
Compiled by The EngineerSomething wrong?How this is made
Postgres handed back the catalogue, and then a second stage finished the job. The snippet extractor picked the densest cluster of matches inside that document, which belonged to an unrelated office [7]. So the model received a page that contains the sentence naming Daniel Lurie as the 46th mayor [3] together with an excerpt that does not mention him [7]. Saying it could not find anything was the correct answer to the evidence it was given [7].
The diagnostic line in the writeup is the part worth stealing. When a fact is simply missing, the gap is obvious. When a fact is unreachable instead, the system looks exactly like a model that doesn't know, as the Argus author puts it [8].
The first fix was the design most people ship. Keyword search first, vector search only when the keyword query returned zero rows [11]. That guard checks whether the search came back empty, not whether what it came back with was any good. Because the department catalogue matched almost any query with a common civic word in it, the row count was never zero, and the vector search that locates the mayor's profile at a cosine distance of 0.27 never ran at all [11][12]. The author reports that version was worse than either search used alone [11].
Running both every time and merging with reciprocal rank fusion works for a boring reason: RRF only reads each result's position in its own list, so a ts_rank and a cosine distance never have to be forced onto a shared scale [13]. It also matches the failure geometry. Keyword search demands every term appear, which is why "traffic citations" missed a document headed "Traffic Violations" [9], while vector search closes that gap but has no notion of an exact name and will rank a near-miss above the document actually about your subject [10].
The 0.42 relevance cutoff is measured rather than guessed, which I like, and measured on one corpus, which is the caveat. On-topic questions land between 0.27 and 0.34, and the two off-topic probes quoted, weather in Tokyo and renewing an Irish passport, sit at 0.51 [14]. That leaves 0.08 of headroom above the worst on-topic result and 0.09 below the off-topic reading [15]. For the number to transfer you would need the same embedding model, documents of comparable length, and an off-topic distribution sampled more widely than two questions [14].
The cost ledger carries a separate trap, and it is arithmetic. Thinking models bill reasoning tokens at the output rate but report them in a field apart from the completion, so a price computed from the two obvious numbers undercounts [19]. One measured call came to $0.000557 by the naive method against $0.001986 actually owed [20], a shortfall of $0.001429 on that single call [21].
Two publishers refused the crawler: BoardDocs 403s any client that is not a browser, and SFCTA sits behind a Cloudflare challenge, both defeatable in about ten minutes with a spoofed user-agent, which the author declined to do [16]. Those feeds are supplied by hand, pushed through the same deterministic parsers, and tagged kind='manual' [17], which is the closest thing to a staleness alarm they have [17].
In an agent shaped like this, the retrieval log is what I'd instrument first: the candidate list with both scores, plus the exact snippet that went into the prompt.
Ranked by verification strength, evidence, and original report placement.
Argus is an agent that watches San Francisco's civic apparatus and acts on what it finds, writing to a real Google Calendar and sending real email at the end of its run.
The author asked Argus who the mayor of San Francisco was, and it did not know.
The answer was already in Argus's database: the city's department directory, a page Argus had fetched, parsed, embedded and stored, contains the sentence "Daniel Lurie is the 46th Mayor of the City and County of San Francisco", and the author could select it with a SQL query in a few seconds.
The department directory is 20,000 characters listing roughly a hundred departments, most of which contain the word "Mayor", such as Mayor's Office of Housing and Mayor's Office for Victims' Rights.
On term frequency alone, the department catalogue outranked the mayor's own profile page.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 31, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Specific, first-hand, unreproducible
The figures are precise to the point of being checkable — 0.27, 0.34, 0.42, 0.51, $0.000557 against $0.001986 — and they are all generated by the same instrumentation the author built and describes, with no repository, query or sample corpus published on dev.to for anyone else to run. Two things a reader can verify without the author's database are the arithmetic, which holds, and the AND semantics of Postgres full-text search. Everything else is credible testimony from a single interested witness.
One builder, one running instance
What is running is genuinely running: scheduled collection, live calendar writes, outbound mail, and a corpus of over a thousand meetings with 288 model calls billed at $0.91 in total. What is absent is anyone else — no second user, no team, no other deployment of the pattern, and two of the wanted data sources reachable only by hand. That is a working system with an installed base of one.
Sells itself short
The headline event in this story is the author's own bug, and the tone stays that way: the clever first design is described as worse than either half of it, the total spend figure deflates the expensive-AI premise, and the retrieval fix is presented as accepting a tradeoff rather than solving anything. If there is any stretch, it is the implied generality of one threshold measured on one civic corpus. Understatement, not overclaim, is the risk a reader should price in.
Credibility, not revenue
A build log on a developer platform pays its author in reputation, and this one is shaped accordingly: hard-won details foregrounded, the awkward absence of published code unremarked. No sponsor, employer or product for sale appears anywhere in it, and Gemini is named only as the thing being metered. The pressure that does exist is the ordinary narrative pull of a postmortem — every bug arrives already fixed, and the fix is never shown failing.
Plausible mechanics, single witness
Nothing in the technical account strains belief — AND-ed query terms, a snippet extractor drawn to match density, reasoning tokens billed at the output rate but reported apart from the completion, are all things that behave this way — and the published arithmetic reconciles. The ceiling is structural: one author, one corpus, one uncorroborated set of measurements, and a fix whose only demonstrated test is the question that broke it.