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>
11 KiB
上游 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.