Nothing inside the app ever contradicted anything. That is exactly why it survived eighteen releases. A reader looked at another almanac, said 'you have Venus in the wrong sign', and they were right.
Let us start with the part that matters to you: if you used this app before 2 August 2026, the five visible planets were shown a fraction of a degree behind where they really were. In 2026 that fraction was 0.37°. It was growing by about 50 arcseconds a year, and it had been there since the first line of the ephemeris was written.
For almost every reading that changed nothing. A third of a degree does not move a planet out of a sign, out of a nakshatra, or out of a house. It matters in exactly one place, and it is the place we got caught: an ingress — the moment a planet crosses from one sign into the next. Get the position wrong by 0.37° and you get the date wrong by hours for a fast planet, and by most of a day for a slow one.
How it was found, which is the embarrassing part
Not by a test. Not by an assertion. By a person opening the app, reading Venus in late Leo, opening Drik Panchang, and seeing Venus in Kanya.
There was no internal signal at all. Every number in this app agreed with every other number in this app, because they were all wrong in the same direction by the same amount. A system that is uniformly wrong is perfectly self-consistent, and self-consistency is what most software checks for.
The actual bug, for anyone who wants it
Sidereal position is tropical position minus the ayanamsa. Fine. The problem is what "tropical position" means, because there is more than one answer and this app was quietly using both.
- The Sun and the Moon came from Meeus series referred to the ecliptic of date — the ecliptic as it is oriented right now.
- The five planets came from a table of JPL orbital elements referred to the J2000 mean ecliptic — the ecliptic as it was oriented on 1 January 2000.
Those two frames drift apart, because the Earth's axis wobbles. That is precession, and it is the same 50-arcseconds-a-year that separates the tropical and sidereal zodiacs in the first place. Then the same ayanamsa was subtracted from both.
So the Sun and Moon were right, and the planets carried the accumulated precession since 2000 as a uniform lag: 0.07° in 1995, 0.37° in 2026, growing.
The fix is one rotation, applied to the planetary longitudes before the ayanamsa. It is four lines.
The test, which is the point of writing this down
A fix with no test is a bug with a delay on it. So:
`` node product/app/js/_precession_test.mjs ``
Nineteen epochs from 1955 to 2049, seven bodies, checked against JPL Horizons apparent geocentric ecliptic longitude — the same quantity a panchanga is built from — captured into the file so it runs with no network. Sun, Moon, Mercury, Venus and Mars land within about 0.02°.
Jupiter comes in at 0.087° and Saturn at 0.162°, and those two are not the same bug. They are the known limit of unperturbed Kepler motion on mean elements: Jupiter and Saturn perturb each other — the great inequality — and no two-body model recovers it. The signature that distinguishes them is the one worth remembering: the real bug made every planet drift the same way by the same amount, and grew with time. These two do neither.
Which is why the test file carries an instruction to whoever next sees it fail: do not fix a failure here by widening a tolerance.
Why we are telling you
Because the alternative is to fix it silently, and we would rather you knew what kind of thing this is.
Every astrology app on your phone is doing this arithmetic. Almost none of them will tell you which ephemeris they use, what its error bars are, or when they last found a mistake in it — and a very large fraction of them are wrapping a free library they have never validated against anything. Ours is written here, in the open, and it was wrong for eighteen releases in a way that only ever showed up if you checked it against something else.
Check it against something else. Here is how to check any astrology app, including this one. If ours disagrees with a panchanga you trust, we want to know, and there is an address for that.
The instrument being open to inspection is not a marketing line. It is the only reason this bug is now a blog post instead of still being in the app.