Build1 distinct publisher3 min readUpdated
A hackathon entrant adversarially tested his own retrieval assistant and caught it inventing endpoints, headers and a source URL for providers he never indexed. A cold rerun cleared 10 of 15.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
Similarity scores topic, not identity. The chunks retrieval handed back for the Interswitch question were real documentation: Monnify's quickstart and Paystack's accept-payments guide, both covering authentication, checkout and webhooks [9]. By the only metric the pipeline had, that retrieval worked. The numbers make the point awkwardly: the worst fabrication in the batch came back with higher retrieval similarity than the cleanest correct decline, so the two sit on the wrong side of each other and no cutoff separates them [8]. What the model produced was not a knowledge gap being papered over. It was a brand name substituted into text that was otherwise accurate, which is why nothing in the output looks wrong until you check which company the docs belong to.
Three of the five out-of-corpus prompts fabricated, a 60 percent failure rate, and they did it against a system prompt that already told the model in plain language to say when the context was insufficient [5][3]. The invented citation is the part that does real damage downstream: a URL that exists nowhere, attached to plausible headers, reads to a reviewer as a checked answer [6]. The same pattern later produced an `x-palmpay-signature` header and a complete HMAC handler for a provider that was never in the corpus [16].
The fix was one paragraph added to the system prompt, with no retraining and no change to retrieval [10]. On the author's rerun it was clean five for five [11]. On an independent cold reproduction, fresh clone and official profiler, three trials per prompt, it was 10 of 15, or about 67 percent, meaning a third of trials still failed [13][14][1]. The residue is not spread evenly. Interswitch, Paga and OPay were 9 for 9; Kuda and PalmPay were 1 for 6 between them [15][2]. The source reports that split and does not explain it, which is the correct amount to claim from fifteen trials.
That leaves the honest description of the guardrail: it holds for three of the five provider names tested and mostly does not hold for the other two. A rule in the system prompt is advisory to a sampler, and this model had already ignored an instruction of exactly that shape three times out of five [5]. The check that would not be advisory is the mechanical one the prompt is asking the model to perform on itself: does any retrieved chunk contain the provider string in the question, and if not, refuse before generation. That is a string test over the retrieved set, not an inference.
The author also logged the cost side rather than declaring victory: the out-of-domain control answer got wordier, offering an unprompted analogy to a similar provider before declining, with no fabricated specifics [12]. That is the right trade to take and the right thing to write down. The bigger lesson from the run is about measurement. A refusal path that passes once has been sampled once, and this pipeline's single-run score and its fifteen-trial score disagree by a third.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
StacksNG is an offline coding assistant scoped to the African fintech stack (Paystack, Flutterwave, Monnify, Termii), built for the Africa Deep Tech Challenge 2026.
Before submitting, the author ran a 20-prompt adversarial batch against his own RAG pipeline.
Category A (in-corpus baseline) and Category D (phrasing brittleness) came back clean.
Category B was five prompts asking about payment providers deliberately never scraped into the corpus: Kuda, PalmPay, Interswitch, Paga and OPay. These prompts failed.
Three of the five Category B prompts ignored a system prompt that already said, in plain language, that if the context does not contain enough information the model should say so.
Asked to verify an Interswitch webhook signature, the assistant wrote a full authentication flow with a real-looking endpoint and real-looking headers, and cited a source URL that was not in the corpus and did not exist anywhere, with zero hedging.
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.
Detailed but single-source and self-instrumented
The article supplies unusually specific instrumentation for a self-report: prompt categories, retrieval provenance for the failing query, a measured similarity band (cosine 0.654-0.676, five chunks within 0.022), the exact system-prompt rule added, a documented regression, and a fifteen-trial rerun that contradicts the author's earlier result. But every number originates from one author, on one unreleased project, with no independent replication, no named base model, and no external benchmark; the only semi-independent check is an agent reproduction the author himself commissioned.
No usage or deployment evidence
The supplied source describes a pre-submission hackathon entry with no users, downloads, deployments, customers, licensing or pricing disclosed. The two available observations are the author's own adversarial batch and a commissioned cold reproduction — test runs, not adoption. Inferring uptake from them would be guessing.
Slightly understated relative to its own evidence
The headline and dek are dramatic, but the body consistently pulls in the opposite direction: the author rejects a fix that 'felt right and did nothing', records a regression instead of hiding it, publishes a cold rerun that demotes his shipped five-for-five to ten of fifteen, and names nondeterminism as the reason. The single overclaim in the piece — the five-for-five fix — is retracted inside the same article, and the remaining unfinished work (a deterministic pre-retrieval gate) is presented as incomplete rather than solved. Claims sit at or slightly below what the reported evidence would license.
Disclosed competitive and self-promotional stake
The author is writing about his own project while actively competing in the Africa Deep Tech Challenge 2026, in a contest where he says accuracy is 50 percent of the score, and publishing on a developer platform where such write-ups build personal reputation. That is a real promotional and competitive incentive shaping which results get told. It is mitigated, not removed, by explicit disclosure of the hackathon context and by the article foregrounding its own failures and a worse independent rerun.
Moderate for the mechanism, low for generalisation
The specific mechanism — retrieval returning topically near-identical chunks from a different provider, and a soft prompt instruction failing exactly in the tightest similarity band — is described with enough internal detail and self-falsification to be credible for this pipeline. Confidence drops for anything beyond it: one publisher, one author, one small four-provider corpus, an unnamed base model, no independent replication, and no adoption evidence at all. The contested five-for-five claim caps how much of the fix narrative can be relied on.
build
Superpowers makes spec-driven work a precondition, then ships it to twelve harnesses1 distinct publisher
build
Gemini 3.7 Flash goes GA on one model layer, and that is the actual news1 distinct publisher
build
The harness, not the model: 250 scores were the acceptance spec for a solo MusicXML editor1 distinct publisher
invest
Gemini 3.7 Flash Is Cheap Until January 1, When The Agent Bill Doubles2 distinct publishers
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 24, 2026