Files
Jyotisha/docs/research/goel_public_calculation_module_2026_10_21.md
T
jesse-uxGrok (agent loop)Cursor
52e5d6dc02 docs: publish the Goel note and the strength boundary
Issue #94 T6. Keep the upstream calculation note, replace the local manuscript path with a book citation, and add our one-line pointer. Record ERR-116 and a changelog line. Skill version is unchanged.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-22 01:29:22 +08:00

11 KiB
Raw Blame History

上游 5fb8379c 原文;我方 Niryaana 选择器在 scripts/rashi_dashas_native.py;书稿未入库

Goel Jaimini public calculation module

Scope and entry points

scripts/goel_jaimini_strength.py publishes the existing frozen runtime's position-only arithmetic, with input validation and explicit blocked points. It contains no customer identity, birth record, report, private fixture, or runtime dependency on a frozen directory. The historical frozen-engine publication receipt remains true: its complete payload is not published.

Public functions:

  • calculate_goel_strength(planet_longitudes, node_occupancy_policy=...)
  • build_goel_chart_evidence(planet_longitudes, ascendant_longitude)

Both accept already calculated sidereal longitudes in degrees, in [0, 360). Supply exactly Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu and Ketu; nodes must be opposite. The builder also requires a finite numeric Ascendant. No ayanamsa, node mode, birth time or ephemeris is inferred. The caller owns those upstream settings. Invalid inputs raise ValueError; equal seven-karaka degrees block the calculation instead of inventing a ranking.

The native jaimini --mode special / --mode all commands and full-reading now expose goel_full_strength and goel_special_points. The builder's strength and special_points keys map to those two report keys. Existing eight-karaka and other Jaimini profiles remain independent.

Sources and page numbering

V. P. Goel, Predicting through Jaimini Astrology, Chapter 1, printed pp10–17 (PDF file pages14–21). Local source: V. P. Goel, Predicting through Jaimini Astrology. Transcription SHA256: 0a8eb5e6de409d5d8ae6684be927b1273acdc5fa72a7f1c36c31de33907341a6. Line numbers below refer to that transcription, not printed line numbers.

Calculation Printed pages PDF pages Transcription locator
Dignity values and natural friendship 10–11 14–15 L461 onward
Seven-karaka rank; Kendriya, Kartari, Adhipati 11–12 15–16 L510–553
Sign permanent and karaka components 13 17 L558–593
Sthana, aspect roles, sign-lord strength 14 18 L598–632
Worked planetary/sign totals 15 19 L636–697
Brahma and Maheshwara; first Rudra rule 16 20 L701–727
Rudra malefic-contact exception 17 21 L731–736
Mercury/Jupiter as sign lord: double role credit 103 107 L4359–4389

The p103 clarification occurs in Goel's short method chapter. Only its explicit double-role explanation is used to clarify the three-role reading of p14. The short method's different weights are NOT mixed into this full method. Numeric reproduction of p15 also checks this role convention.

Degree-specific Moolatrikona ranges reuse the existing named raman_manual_degree_mt_exaltation_first_v1 profile from scripts/trikona_raman.py: B. V. Raman, A Manual of Hindu Astrology, section29, printed p12. Goel provides the score categories; this auxiliary profile supplies degree ranges. Exaltation is checked first. This is an explicit method choice, not a claim that all Goel/Raman conventions coincide.

Formula contract

Planet total is dignity + karaka + kendriya + kartari + adhipati.

  • Dignity: exalted60, Moolatrikona45, own30, friend22.5, neutral15, enemy7.5, debilitated3.75; natural friendship, not compound friendship.
  • Seven classical planets ranked by degree within sign: 60,45,30,22.5,15,7.5,3.75. Nodes never receive these karaka points.
  • Kendra / Panaphara / Apoklima from AK: 60 / 30 / 15.
  • Kartari: 60 when the planet is in an odd sign and both adjacent signs have occupants; nodes count in this component under both occupancy policies.
  • Adhipati: 60 for a qualifying odd-sign lord with a malefic conjunction or Jaimini rasi aspect. All classical planets except Moon own an odd sign. This implementation declares Sun/Mars/Saturn/Rahu/Ketu malefics and excludes self-contact; phase-dependent Moon and conditioned Mercury are not added.

Sign total is permanent + occupying karaka points + Sthana + aspect roles

  • sign-lord total. Movable/fixed/dual permanent values are15/30/60. Sthana is zero if empty, otherwise45+15*n. Jupiter, Mercury and sign lord are three roles worth60 each; if one planet fulfills two roles it can earn120. Conjunction and aspect qualify a role once, not twice. Aspects are Jaimini sign aspects, not Parashari planetary aspects.

Special points:

  • Brahma first checks AK's eighth lord occupying AK's eighth. Otherwise it compares Lagna/seventh Goel totals and selects the strongest non-Saturn 6/8/12 lord from the stronger anchor. The Saturn exclusion belongs to the fallback branch; it is not silently applied to the first override.
  • Maheshwara is AK's eighth lord; if exalted, compare AK's twelfth lord. Saturn is allowed.
  • Rudra compares Lagna's second/eighth lords. The weaker candidate wins when it alone has malefic contact; when both have contact the stronger wins. The frozen convention treats conjunction and rasi aspect as contact; the p17 exception itself says “aspect” and its discussion adds association. Retain this declared convention when porting rather than hiding it.
  • Equal final scores remain blocked; no silent degree or list-order tie-break.

Node discrepancy and default

Printed p14 explicitly includes Rahu and Ketu in Sthana. The p15 worked totals reproduce when they are excluded from that component only. include_nodes_text is the default because it follows the explicit rule. exclude_nodes_worked_example is the reproducibility alternative, retained under strength.worked_example_node_exclusion by the builder.

This switch does NOT remove nodes from Kartari or malefic contacts and does not give them karaka points. For the published example, excluding nodes gives Virgo281.25 / Pisces363.75; including them gives296.25 /378.75. The other ten sign totals and all seven planet totals agree between policies. This is an observed text/table discrepancy, not proof of the author's intended erratum.

Relation to 9f08b57b and 258e08e3

These are different algorithms:

Field / producer Comparison Method / use
lagna_seventh_strength First/seventh Goel numeric totals Goel Brahma/Sthira-related explicit selector evidence
Historical niryaana_shoola_strength Same first/seventh totals Deprecated frozen-export alias only
select_niryaana_shoola_start_sign Second/eighth PVR Ayur ordered comparison: occupancy, all-planet rasi aspects, exalted-occupant presence

9f08b57b implements the last row and 258e08e3 explicitly includes both nodes in its occupancy/aspect counts. Those changes are already on main. This publication does not replace them. The legacy alias now carries deprecated: true, comparison: lagna_vs_seventh, and not_for metadata. Use the canonical new key for Goel totals; use the existing PVR selector for Niryaana. Sthira's existing explicit-input short selector is a separate contract: do not label Goel full weights as the Chapter5 short weights, and do not infer that publishing these points automatically executes Sthira Dasha.

Portable synthetic example

from scripts.goel_jaimini_strength import build_goel_chart_evidence

positions = dict(Sun=29., Moon=58., Mars=87., Mercury=116.,
                Jupiter=145., Venus=174., Saturn=203., Rahu=245., Ketu=65.)
result = build_goel_chart_evidence(positions, 0.)

This is deliberately invented positional data, not a real birth chart.

Planet Dignity Karaka Kendriya Kartari Adhipati Total
Sun 60 60 60 0 0 180
Moon 60 45 30 0 0 135
Mars 7.5 30 15 60 60 172.5
Mercury 7.5 22.5 60 0 0 90
Jupiter 22.5 15 30 60 60 187.5
Venus 3.75 7.5 15 0 60 86.25
Saturn 60 3.75 60 0 0 123.75

AK=Sun. Lagna=367.5; seventh=225. Brahma=Jupiter; Maheshwara=Mars; Rudra=Mars. Gemini Sthana=75 (alternative60); Sagittarius Sthana=60 (alternative0). The existing PVR Niryaana selector instead selects Taurus.

tests/test_goel_jaimini_strength.py contains these literal expectations, the printed p15 totals without birth identity, branch checks, input rejection, blocked points and native entry wiring. Run:

python3 -m pytest -q tests/test_goel_jaimini_strength.py tests/test_niryaana_shoola_dasha.py

Status: source-bounded wired, with one published numerical table replay and synthetic arithmetic regression. No predictive-case validation, global closure, PL9 parity or automatic change to a frozen customer pin is claimed.

Verification:166 tests passed across test_goel_jaimini_strength, test_niryaana_shoola_dasha, test_sthira_brahma_goel_short_method, test_trikona_raman_native, test_jaimini, test_jaimini_source_identity and test_bphs_validation_runtime. This includes the real full-reading CLI and its Goel output, as well as the existing PVR Niryaana behavior.

Current-window exploration and publication boundary

Started from main258e08e3 in an isolated codex/goel-publication worktree; the original workspace was on customer-export-r32-release with unrelated dirty files, all preserved. Checked all six existing linked worktree paths, branch/recent-commit status, tracked file inventory, producer/CLI/report/test searches and the two whole-machine sweep records. WorkBuddy skill is a symlink to the primary repository; its registry remains a separate authority. The configured r32 runtime supplies the reviewed position-only Goel module; its hash was235fc8f90718b6da45af0ee1edc2a7c195be92664ff55bbb7b8e0398b605b33d. The archived 10-16 publication receipt confirms the full payload was excluded. The separately inspected local 10-16 r2 engine has neither this named module nor the two Goel output fields; therefore the archive date must not be used as proof of that report's actual generating pin. This extraction is from the inspected r32 source, not a claim that the omitted r2 payload contained it. Repository APIs/renderers remain consumers of the native engine, not a second implementation. No external engine code or book pages are republished here.

Pre-work check passed, including external adapter diagnostics and remote visibility; direct git ls-remote origin refs/heads/main returned258e08e3. The broader governance audit separately flags main_worktree_dirty and remote_head_unverified; the former is real and preserved, and the latter does not certify publication despite the successful direct visibility check. Capability authority snapshot and governance audit were invoked; the former's historical customer examples are not authority for this module. The reused chains are Goel position arithmetic, Raman dignity helpers, Jaimini rasi aspects, and the existing PVR Niryaana selector. Unclosed items are lineage differences, equal-strength selections without a source rule and independent predictive verification. This is code publication, not a chart interpretation, personal report export, or MEVG predictive validation.