Build1 distinct publisher3 min readUpdated
An automated news watch republished an August 3 announcement on August 17 with a verified-fact label. The useful fix was not a longer prompt but six lines that grade the output.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
On August 17, the top item on an automated crypto and finance watch page read "Last trading day for the first US spot Bitcoin ETF to shut down", tagged as verified fact, with three sources all dated August 3 [1][2]. Fourteen days separated the newest source from the event it announced, and the site's operator says he had written a rule a week earlier forbidding precisely that [3][4].
The pipeline is ordinary. Every 24 hours a scheduled task wakes a Node script that calls a language model with web search access, asks it to sweep the last few hours of crypto and financial news, and demands strict JSON back [5]. That JSON renders a public page of items, each with a title, a summary, its sources and their publication dates [6]. The instruction text is 8,900 characters covering categories, preferred sources, output format and freshness rules [7], and it requires a certainty label on every item, from FAIT_VERIFIE when two independent primary sources agree down to SPECULATIF for a hypothesis [8].
The stored rule is not vague. If an item's sources are all older than the cycle window, the model may not publish it as is: search for a recent source, add it and keep FAIT_VERIFIE, or downgrade to PROBABLE and say in the summary that the deadline has not been reconfirmed [12]. The output honoured neither branch. No recent source, no downgrade, no caveat, published with the confidence of something confirmed that morning [13]. At a 24-hour cycle, sources 14 days old sit 336 hours out, fourteen times the window the rule was written to police [17].
There is a structural reason the failure is hard to see. The prompt is a template: double-brace markers such as {{DATE}}, {{FREQUENCY_HOURS}} and {{PRICES}} are filled in by the script immediately before the call, so the text the model receives is never exactly the text in the editor [9][10]. The author places the defect at that fill-in step, and notes the model only ever sees the rendered output, so anything that goes wrong there surfaces nowhere else [11]. His own headline calls them three rules that never reached the model [22]. The published account breaks off mid-sentence before the mechanism and the measured comparison arrive [21], so treat the specific corruption as unresolved.
The instinct in that situation is to blame disobedience and push harder: more capitals, the instruction repeated twice [14]. He says that instinct cost him the most time [14]. The prompt was genuinely badly built, to be fair: four blocks each declaring itself top priority, a freshness rule and a reconfirmation rule that contradict each other on edge cases, and exactly one concrete example across 8,900 characters [15]. The rewrite added section tags, an explicit priority ranking, a four-branch numbered freshness procedure and two worked examples, reaching 11,800 characters [16]. That is 2,900 more characters of specification, roughly a third longer, and still not one line of enforcement [18].
The enforcement is the part worth copying. Because the output is JSON, the rule is gradeable without anyone reading the prose: parse the source dates, take the newest, mark the item stale if it falls outside the window, test the summary for a hedge, and flag a violation when a stale item is either labelled FAIT_VERIFIE or carries no caveat [19][20]. Six lines, and a run stops being an aesthetic judgement about prompt quality and becomes a count of items that break the rule [20][23].
What to watch: whether the comparison of old prompt against new ever produces numbers, since the account stops before it [21]; and whether the check runs as a publish gate or only as an after-the-fact audit. A rendered prompt is an artefact you can assert against, the same way the JSON is.
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.
The prompt is a template holding double-brace markers the script fills in right before the call: {{DATE}} becomes the current timestamp, {{FREQUENCY_HOURS}} the number of hours in the cycle, {{PRICES}} a block of prices pulled from an API.
Because of the template fill-in, the text the model receives is never exactly the one the author reads in his editor.
The author states the defect sits at the fill-in step, and that the model never sees the template, only the text produced at that step, so whatever goes wrong there shows up nowhere else.
The published account ends mid-sentence at "The old promp", before the comparison between the old and new prompts is reported.
The top item on the feed read "Last trading day for the first US spot Bitcoin ETF to shut down", was tagged as verified fact, and carried three sources all dated August 3rd.
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 first-person artifacts, no external corroboration
The account supplies unusually concrete artifacts for a single post: the offending feed item with its source dates, the reconfirmation rule quoted verbatim from config, the six-line grading check in full, and a timestamped stream trace with per-phase latency totals. Everything, however, rests on one self-reported source with no independent verification, the substituted prompt is never shown, and the decisive old-versus-new numbers are absent, so evidence lands mid-range rather than high.
One personal pipeline in production, no third-party uptake
Adoption evidence exists but is minimal in scope: a single operator's public news-watch page running on a 24-hour schedule, one observed mislabelled item, one prompt revision and one aborted evaluation run. No other users, teams, downstream consumers or reuse of the grading pattern are reported anywhere in the material.
Framing outruns what the supplied text demonstrates
The headline asserts 'three rules that never reached the model' and the dek asserts that six grading lines were the useful fix, yet the supplied account neither shows the substituted prompt that would prove rules were dropped at fill-in nor reports any violation counts for the old and new prompts; the comparison runs were killed on timeout. The underlying craft observations are sound and modestly stated, so the overstatement is moderate rather than severe.
Self-authored account of the author's own site and method
The post is written by the operator of the system it examines and published on a developer platform where such write-ups build professional reputation, giving a mild incentive to present the diagnosis and the rewrite as clean wins. Countervailing factors are visible: the author reports his own wasted time, calls his prompt poorly built, and admits the comparison produced zero results. No vendor sponsorship, funding, commercial product or paid relationship is disclosed anywhere in the material, so nothing beyond self-presentation can be attributed.
Internally consistent but single-source and truncated
Confidence is limited by structure rather than by contradiction: one publisher, one self-reported source, a body that breaks off mid-sentence, and a ledger claim about the cut point that does not match the supplied text's ending. Within those limits the artifacts are specific, mutually consistent and mostly verifiable on their face, which supports moderate confidence in the mechanical claims and low confidence in the causal diagnosis and the rewrite's effect.
build
A GAN beauty filter is a device budget allocation, not a feature toggle1 distinct publisher
build
Every viewer hits your HLS key endpoint in the same second, and almost nobody tests it1 distinct publisher
build
The optional EntityManager is the bug: moving the transaction boundary into AsyncLocalStorage1 distinct publisher
build
A Timed-Out Reset SMS Is Not A Failed One, And Your Retry Code Probably Disagrees1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 19, 2026