Who needs to do something
If you call compute_shadbala, your numbers change and stored results will not match a recomputation. If you match on the Body enum in Rust, you need three new arms. If you call emit_graph, check that your observer and instant are real.
Planetary positions are unchanged to within 1e-8 arcsec. Charts, panchanga, dashas, vargas and drishti are untouched.
1. Sthana Bala was one-fifth of itself
BPHS Ch.27 builds Sthana Bala, the positional strength, out of five sub-components. Vedaksha computed one of them, Uchcha Bala, and reported it under the name of the whole. The tool description said “full six-fold Shadbala”. The response carried sthana_bala and uccha_bala as separate fields holding the same number, in every response this engine has ever served.
It also required a sign argument from every caller and then discarded it. Two planets at the same degree, one in its own sign and one debilitated by sign, scored identically.
| Sub-component | Virupas | In 7.2.0 | Rule |
|---|---|---|---|
| Uchcha Bala | 0-60 | Yes | Distance from the exaltation degree |
| Ojhayugma Bala | 0-30 | Yes | Odd/even rasi and navamsa |
| Kendradi Bala | 15-60 | Yes | Kendra 60, panapara 30, apoklima 15 |
| Drekkana Bala | 0 or 15 | Yes | Male, neuter and female grahas by third of sign |
| Saptavargaja Bala | - | No | Dignity across seven vargas - see below |
All four are now reported as separate fields alongside the composite, so you can see what a number is made of instead of taking it whole.
2. Saptavargaja Bala is still missing, and says so
The fifth sub-component is the planet's dignity across seven divisional charts, graded by the five-fold friendship. It needs a Moolatrikona degree table and a panchadha maitri derivation that we do not hold from a primary source, and this project does not take values from a modern edition's worked table.
So it is absent, and the absence is now stated in the module docs, the README and the tool description rather than contradicted by them. A Sthana Bala from Vedaksha is the true value less its Saptavargaja term, bounded by 165 virupas. Kala Bala is partial on the same grounds: Nathonnatha and Paksha only.
If you need the full classical figure, this tool does not give it to you yet. That is a better answer than a number that looks complete.
3. Ketu is a body now
There was no south-node variant of Body, so Ketu never went through the position pipeline. The only Ketu on offer was nodes::south_node_*, which sits a layer below and carries no nutation. Pairing that with a Body-routed Rahu left the two up to 17.2″ off being opposite.
Body::MeanSouthNode, Body::TrueSouthNode and Body::TrueSouthNodeOsculating now resolve exactly as their north counterparts do. Rahu and Ketu share one reference frame and one nutation term, and are exactly opposite.
This adds variants to a public enum, so an exhaustive match on Body needs three new arms or a wildcard. That is the one thing in this release that can stop a Rust build.
4. Two calls that used to pass now fail
Both were arguments the engine demanded and then ignored, which meant a caller could contradict itself and never find out.
compute_shadbala
A sign that disagrees with longitude. Nothing read sign before, so a caller could contradict itself and never learn. Both are consumed now, so send floor(longitude / 30) or stop sending it.
emit_graph
A latitude or longitude outside the globe, and a chart_json with no finite julian_day. Both used to pass straight into the emitted Chart node - latitude 9999 stayed 9999, and a missing instant became "julian_day": null.
5. Which provider for the outer planets
An external parity harness measured Jupiter and Saturn carrying more error than the inner planets and asked why. They were right, on one of the two providers, and the README now publishes the whole table rather than the single mean that hid it. Analytical provider, measured-delta-T era, mean arcsec against the committed JPL oracle:
| Sun | 0.180″ | Jupiter | 0.239″ |
| Moon | 0.169″ | Saturn | 0.251″ |
| Mercury | 0.180″ | Uranus | 0.267″ |
| Venus | 0.180″ | Neptune | 0.503″ |
| Mars | 0.178″ |
The inner bodies sit in a tight band near 0.18″ and the error grows outward. That is the truncation: the VSOP87A series is cut at a uniform absolute amplitude of 1e-7 AU for every planet, and a uniform absolute cut leaves a residual that scales with the orbit. Saturn is not cut harder than Mercury; it keeps the most terms of any planet.
If you need the outer planets below 0.1″, use SpkReader, where they are the best bodies rather than the worst: Jupiter 0.066″ and Saturn 0.064″ against the same oracle. The analytical provider exists to run in WASM and at the edge with no data files, and its coefficient size is what buys that.
6. Deprecations, and what still compiles
A vedaksha-vedic = "7" dependent keeps building. sthana_bala(planet, sign, longitude) keeps its signature and its old behaviour, Uchcha Bala with the sign discarded, and is deprecated in favour of uccha_bala. The composite is sthana_bala_full(planet, longitude, bhava). compute_shadbala(positions, lagna_sign) is kept and deprecated; it still totals only the three components reachable from a bare position, and the struct no longer claims that is six.
On the JSON surfaces the Shadbala response gains four fields and loses none. compute_gochara stops emitting ashtakavarga_score: null on every entry: it was structurally unfillable, since the bindu tables come from the natal chart the tool is never given.
Getting it
cargo add vedaksha, pip install vedaksha, npm install vedaksha-wasm, or ghcr.io/arthiqlabs/vedaksha-mcp:v7.2.0. Current release is v7.2.0, published 2026-08-23, under BUSL-1.1 converting to Apache 2.0 on 2030-08-23.
Full validation at this release: 1,093 tests and a 24,350-row JPL Horizons oracle comparison. The status page carries the accuracy figures and the distribution channels.