Build1 distinct publisher2 min readPublished
The lookup took a year argument and ignored it, returning a single instant for eleven of them, and because the golden fixtures had been generated by calling that same lookup, the suite stayed green.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
The property assertion that catches this knows nothing about astronomy. It calls the lookup once per year from 2020 to 2030, formats each instant into a string, drops it in a Set, and requires the Set to hold eleven entries; the old table produced one [14]. For a function keyed on a year, the cheapest observable consequence of reading the key is that the output moves when the key moves. No ecliptic longitude required.
The example-based tests could not do that job, though not quite for the reason the author gives. He writes that all three probes sat on the same side of the real 17:26 boundary, so even expectations derived from reality would have passed against the wrong table [13]. Run the third probe. 05:03 is after the library's 05:02 and before the real 17:26 [6][7]. Under the real instant, a 2024-02-04 birth before 17:26 takes the earlier year pillar [8], while the engine reading 05:02 returns the later one [12]. A truth-anchored fixture at that same probe time would have failed on day one [6]. What made the suite useless was where the expected values came from, not where the probes sat [11].
The gaps are large in both directions. For 2024, 05:02 to 17:26 is 12 hours 24 minutes [1]. For 2025 the library sits 5 hours 52 minutes after the computed instant and on the following calendar day [2]. For 2027 it is 5 hours 44 minutes early [3]. The table was accurate for the year it was presumably generated in, which is the least useful place for a lookup table to be right [6].
The property test does not buy correctness. It proves the argument is read, nothing more. A table that varied per year but carried a uniform offset, from applying a timezone twice, would pass it comfortably. Catching that needs an oracle that does not consult the table at all, which is why the author stopped looking values up and started computing them [15].
If you want the assertion to transfer to your own f(key) lookups [16], the condition is that distinct keys must genuinely produce distinct values. Solar terms qualify: eleven years, eleven instants, because the Earth's orbit does not align with the calendar [2]. Feature flags and per-tenant config do not, since keys collapsing onto one value is often correct there. The weaker form still works: assert at least two distinct outputs across the key space. That is enough to catch a parameter that is never read, which is the failure mode here, and the one that ships confident, uniform, plausible output [6].
Ranked by verification strength, evidence, and original report placement.
The engine obtained solar term instants from a third-party calendar library via the call getSolarTermsByYear(year).
The author dumped the 입춘 instant for eleven consecutive years and diffed it against an independent astronomical computation.
The library returned February 4, 05:02 KST for all eleven years; the function took a year argument and ignored it, and happened to be right for 2026, presumably the year the table was generated.
The author runs a Korean saju (BaZi) service whose pitch is that the numbers are computed deterministically and only the prose is written by a model, so the calculation layer is not allowed to be vaguely right.
A saju chart's year and month pillars change at solar terms, the 24 points where the sun reaches a fixed ecliptic longitude; the year pillar turns at 입춘 (315 degrees), which lands around February 4th at a specific minute that differs every year because the Earth's orbit does not follow the calendar.
An agent working on unrelated copy flagged a contradiction: a FAQ page claimed minute-level solar term precision while a comment in the engine said the data only covered 2020-2030.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · September 1, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Invariants make an agent change behaviour to turn the suite green1 distinct publisher
build
Sequence-level equivalence catches the cache a single-call test suite waves through1 distinct publisher
build
The capture returned HTTP 200. The file was a Cloudflare block page.1 distinct publisher
build
Three manual interventions in a month, and every guard was working as designed1 distinct publisher
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.
Falsifiable numbers, one uncorroborated voice
Everything rests on one developer's account, but he handed over the material to check him with: the 05:02 stamp repeated across eleven years, the computed instants for 2024-2027, the two opposing pillar sets for a single February 4th birth. Those are the kind of figures an ephemeris settles in ten minutes, which is what keeps this above self-assertion. What holds it down is the unnamed calendar library — the central defect cannot be reproduced by a reader, and nobody can tell whether their own dependency tree contains it.
One repository, freshly patched
The only uptake anyone can point to is the author's own: lookup swapped for a longitude root-find, probes moved to straddle the real boundary, issued readings left frozen with regeneration on request. That is a fix landing in one small commercial service on the day it was written about. No second team, no upstream issue, no downstream project appears anywhere in this reporting, and the variance assertion he recommends for caches, feature flags and per-tenant settings has no observed adopter but him.
Slightly larger in the telling
Five years of wrong birthdays narrows on inspection to births on solar-term days, and to the author's credit the piece says so plainly rather than leaving the headline to do the work. Two stretches survive that honesty. The year he calls correct is still a minute off the independent value — precisely the resolution the FAQ sells. And the claim that even a truth-anchored test would have passed does not survive his own probe table, since 05:03 sits between the fictional boundary and the real one, where a true expectation and the engine's answer part company.
Costly candour with soft edges
A vendor whose entire pitch is deterministic arithmetic publishing the news that its arithmetic was wrong for a decade of birthdays is paying real reputational money, and that cuts against the usual worry. The softer edges are still visible: this is a developer-platform post where a well-told postmortem converts into standing, the failing dependency absorbs the blame anonymously, and the two figures a customer would ask for — how many readings were affected, and were those people told — never appear.
Coherent, specific, unreviewed
Accounts that indict their own author, quote their own passing tests and print the numbers that prove them wrong are usually true, and the mechanism here is ordinary enough to be believable on sight. We hold at the middle because no one outside the author has touched any of it, one of his two conclusions argues with his own data, and the details that would let a reader confirm scope — the library's name, the number of charts issued in the affected window — are the details left out.