|
13 | 13 | - 🟧 Medium |
14 | 14 | - 🟨 Low |
15 | 15 |
|
| 16 | +**Guiding principles:** |
| 17 | + |
| 18 | +- Every minor release (5.x) is fully backward compatible — no breaking changes. |
| 19 | +- All new fields on existing models are `Optional` with default `None`. |
| 20 | +- All new modules are additive — existing imports and workflows continue to work unchanged. |
| 21 | +- Breaking changes are collected and shipped together in a single major release (6.0). |
| 22 | + |
| 23 | +Kerykeion is built on [Swiss Ephemeris](https://www.astro.com/swisseph/), which offers |
| 24 | +far more computational power than the library currently exposes. Much of this roadmap |
| 25 | +is about unlocking capabilities that Swiss Ephemeris already provides but Kerykeion |
| 26 | +does not yet surface. |
| 27 | + |
| 28 | +--- |
| 29 | + |
| 30 | +## Completed |
| 31 | + |
| 32 | +- [x] **Discepolo's Score in Synastry** — `RelationshipScoreFactory` with full Ciro Discepolo scoring, destiny sign evaluation, aspect breakdown, 6-tier descriptions. Shipped in v5.0.0, score breakdown added in v5.6.0. |
| 33 | +- [x] **Unit tests for polar circle edge cases** — Dedicated tests, parametrized fixtures, expected data for arctic/antarctic subjects across all house systems and sidereal modes. |
| 34 | +- [x] **`get_translations` function for multiple languages** — Multi-language support (EN, FR, PT, IT, CN, ES, RU, TR, DE, HI) with fallback logic, nested key access, and custom dictionary override. |
| 35 | + |
| 36 | +--- |
| 37 | + |
| 38 | +## v5.12 — Enrich Existing Calculations |
| 39 | + |
| 40 | +🟥 High — These changes make existing data richer without changing the public API. Users write the same code as before but get more information in the models they already use. |
| 41 | + |
| 42 | +- [ ] **House cusp speeds** — Populate the `speed` field (degrees/day) on house cusp points. The field already exists on `KerykeionPointModel` but is currently only populated for planets, not houses. House cusp velocities are useful for primary directions, secondary progressions, and for understanding how quickly a transiting planet crosses a house boundary. |
| 43 | + |
| 44 | +- [ ] **Expanded fixed stars (2 → 17)** — Add 15 traditional fixed stars to the calculation pipeline, plus a `magnitude` field for apparent visual brightness: |
| 45 | + |
| 46 | + | Star | Mag. | Tradition | |
| 47 | + |------|------|-----------| |
| 48 | + | Sirius | −1.46 | Brilliance, fame | |
| 49 | + | Canopus | −0.74 | Navigation, pathfinding | |
| 50 | + | Arcturus | −0.05 | Prosperity, guard | |
| 51 | + | Capella | +0.08 | Civic honor, curiosity | |
| 52 | + | Rigel | +0.13 | Teaching, ambition | |
| 53 | + | Procyon | +0.34 | Quick success, rash action | |
| 54 | + | Betelgeuse | +0.42 | Military honor, fortune | |
| 55 | + | Altair | +0.77 | Boldness, ambition | |
| 56 | + | Aldebaran | +0.86 | Royal Star — integrity | |
| 57 | + | Antares | +0.96 | Royal Star — courage | |
| 58 | + | Pollux | +1.14 | Spirited, subtle | |
| 59 | + | Fomalhaut | +1.16 | Royal Star — idealism | |
| 60 | + | Deneb | +1.25 | Ingenuity, talent | |
| 61 | + | Achernar | +0.46 | Royal honors | |
| 62 | + | Algol | +2.12 | Intensity, misfortune | |
| 63 | + |
| 64 | + The four "Royal Stars of Persia" (Aldebaran, Regulus, Antares, Fomalhaut) and Algol are among the most significant points in any chart. Currently only Regulus and Spica are supported. |
| 65 | + |
| 66 | +- [ ] **Expanded sidereal modes (20 → 48 + custom)** — Add all remaining ayanamsa supported by Swiss Ephemeris: |
| 67 | + |
| 68 | + | Category | Modes | |
| 69 | + |----------|-------| |
| 70 | + | Aryabhata school | `ARYABHATA`, `ARYABHATA_522`, `ARYABHATA_MSUN` | |
| 71 | + | Galactic Center | `GALCENT_0SAG`, `GALCENT_COCHRANE`, `GALCENT_MULA_WILHELM`, `GALCENT_RGILBRAND` | |
| 72 | + | Galactic Equator | `GALEQU_FIORENZA`, `GALEQU_IAU1958`, `GALEQU_MULA`, `GALEQU_TRUE` | |
| 73 | + | True star-based | `TRUE_CITRA`, `TRUE_MULA`, `TRUE_PUSHYA`, `TRUE_REVATI`, `TRUE_SHEORAN` | |
| 74 | + | Suryasiddhanta | `SURYASIDDHANTA`, `SURYASIDDHANTA_MSUN`, `SS_CITRA`, `SS_REVATI` | |
| 75 | + | Lahiri variants | `LAHIRI_1940`, `LAHIRI_ICRC`, `LAHIRI_VP285` | |
| 76 | + | Other | `BABYL_BRITTON`, `GALALIGN_MARDYKS`, `KRISHNAMURTI_VP291`, `VALENS_MOON` | |
| 77 | + | User-defined | `USER` — provide a reference epoch and ayanamsa value | |
| 78 | + |
| 79 | +- [ ] **Ayanamsa value exposure** — Expose the numeric ayanamsa offset (in degrees) in the subject model. Currently only the ayanamsa name is stored. Every sidereal astrologer needs this for verification and cross-system comparison. |
| 80 | + |
16 | 81 | --- |
17 | 82 |
|
18 | | -## Version 5 Tasks |
19 | | - |
20 | | -### 🟥 High Priority |
21 | | - |
22 | | -### 🟧 Medium Priority |
23 | | - |
24 | | -- [ ] Support BCE dates |
25 | | -- [ ] Discepolo's Score in Synastry |
26 | | -- [ ] **Egyptian Terms and Chaldean Decans** - Add essential dignities support |
27 | | - - **Background**: Mail Object: "How to draw egipty terms and decans in the Wheel" |
28 | | - - **Egyptian Terms (Bounds)**: 5 unequal divisions per sign, each ruled by Mercury/Venus/Mars/Jupiter/Saturn |
29 | | - - **Chaldean Decans (Faces)**: 3 equal 10° divisions per sign, following Chaldean planetary order |
30 | | - - **Implementation**: |
31 | | - - [ ] Create `kerykeion/dignities/` module with: |
32 | | - - [ ] `decan_utils.py` - Chaldean decan calculation functions |
33 | | - - [ ] `term_utils.py` - Egyptian terms lookup and calculation |
34 | | - - [ ] `dignity_data.py` - Complete reference tables for all 12 signs |
35 | | - - [ ] Add optional fields to `KerykeionPointModel`: `decan_number`, `decan_ruler`, `term_ruler` |
36 | | - - [ ] Update `AstrologicalSubjectFactory` to optionally calculate dignities |
37 | | - - [ ] Add unit tests for all dignity calculations |
38 | | - - [ ] Add documentation for the new features |
39 | | - |
40 | | -### 🟨 Low Priority |
41 | | - |
42 | | -- [ ] Implement Gauquelin Sector as an additional house system mode (`G`) |
43 | | -- [ ] Create unit tests for polar circle edge cases |
44 | | -- [ ] `get_trasnlation` function for multiple languages |
| 83 | +## v5.13 — Vedic & Traditional Enrichment |
| 84 | + |
| 85 | +🟧 Medium — Opt-in via configuration flags, zero overhead for users who don't need them. |
| 86 | + |
| 87 | +- [ ] **Nakshatra support (Vedic lunar mansions)** — For every astrological point, calculate the Nakshatra (1 of 27, each 13°20'), Pada (1–4, each 3°20'), and Vimsottari Dasha lord. Foundation of Vedic Jyotish: Dasha timing, Ashtakoot compatibility, and finer characterization than the 12 signs alone. No major Python astrology library currently calculates nakshatras natively. |
| 88 | + |
| 89 | + New fields on `KerykeionPointModel`: |
| 90 | + - `nakshatra: Optional[str]` — e.g., "Rohini" |
| 91 | + - `nakshatra_number: Optional[int]` — 1–27 |
| 92 | + - `nakshatra_pada: Optional[int]` — 1–4 |
| 93 | + - `nakshatra_lord: Optional[str]` — e.g., "Moon" |
| 94 | + |
| 95 | +- [ ] **Essential dignities (Egyptian Terms & Chaldean Decans)** — For every planet, calculate essential dignity status per the Ptolemaic/medieval tradition: Domicile (+5), Exaltation (+4), Triplicity (+3), Term/Bounds (+2), Face/Decan (+1), Peregrine (0), Fall (−4), Detriment (−5). Backbone of horary, electional, and traditional natal astrology. |
| 96 | + |
| 97 | + New fields on `KerykeionPointModel`: |
| 98 | + - `decan_number: Optional[int]` — 1–3 |
| 99 | + - `decan_ruler: Optional[str]` |
| 100 | + - `term_ruler: Optional[str]` |
| 101 | + - `essential_dignity: Optional[str]` — highest active dignity name |
| 102 | + - `dignity_score: Optional[int]` — −5 to +5 |
| 103 | + |
| 104 | +--- |
| 105 | + |
| 106 | +## v5.14 — Observational Astronomy |
| 107 | + |
| 108 | +🟧 Medium — New standalone factory classes for astronomical phenomena outside the context of a birth chart. |
| 109 | + |
| 110 | +- [ ] **Planetary phenomena (`PlanetaryPhenomenaFactory`)** — For each planet: elongation from the Sun, illumination fraction, phase angle, apparent diameter, apparent magnitude, and morning/evening star status. Elongation is fundamental for understanding planetary visibility — a planet within ~15° of the Sun is traditionally "combust." |
| 111 | + |
| 112 | +- [ ] **Localized eclipses (`EclipseFactory`)** — Search for upcoming solar and lunar eclipses, optionally filtered by geographic location. For each eclipse: type (total, annular, partial, penumbral), magnitude, duration, contact times, Sun/Moon altitude, obscuration percentage. Currently Kerykeion only calculates the date of the next global eclipse without details and without considering local visibility. |
| 113 | + |
| 114 | +--- |
| 115 | + |
| 116 | +## v5.15 — Advanced Astrology |
| 117 | + |
| 118 | +🟧 Medium — New domain factories for specialized astrological techniques. |
| 119 | + |
| 120 | +- [ ] **Planetary nodes and apsides (`PlanetaryNodesFactory`)** — For any planet (not just the Moon): ascending node, descending node, perihelion, aphelion — in both mean and osculating modes. Central to evolutionary astrology (Jeffrey Wolf Green, Steven Forrest). Perihelion/aphelion relevant in heliocentric astrology and cosmobiology. |
| 121 | + |
| 122 | +- [ ] **Relocated charts (`RelocatedChartFactory`)** — Keep all planetary positions from a birth chart but recalculate houses and angles for a different geographic location. Widely-used predictive technique and computational prerequisite for Astro*Carto*Graphy (ACG) lines. |
| 123 | + |
| 124 | +--- |
| 125 | + |
| 126 | +## Exploring |
| 127 | + |
| 128 | +Features under consideration — design and scope may change significantly. |
| 129 | + |
| 130 | +- [ ] **Uranian / Hamburg School planets** — The 8 hypothetical trans-Neptunian points (Cupido, Hades, Zeus, Kronos, Apollon, Admetos, Vulkanus, Poseidon). Swiss Ephemeris IDs 40–47. |
| 131 | +- [ ] **Gauquelin sectors** — House system `"G"` with 36 sectors. Michel Gauquelin's statistical research on the "Mars Effect." |
| 132 | +- [ ] **Heliocentric returns and lunar node crossing** — Extend `PlanetaryReturnFactory` with heliocentric returns and exact node crossing moments. |
| 133 | +- [ ] **Heliacal risings and settings** — First/last day of visibility of planets and fixed stars. Oldest form of astronomical observation (Babylonian, ~1800 BCE). No Python library currently calculates this. |
| 134 | +- [ ] **Lunar occultations** — When the Moon passes in front of a planet or fixed star. Traditionally "powered-up conjunctions." |
| 135 | +- [ ] **Planetocentric perspective** — Positions as seen from another planet. Niche research feature, unique to Kerykeion. |
| 136 | + |
| 137 | +--- |
| 138 | + |
| 139 | +## v6.0 — Foundation Cleanup |
| 140 | + |
| 141 | +🟨 Low — Breaking changes, deprecation removal, and precision improvements. Only after 5.x features are stable. Will include a migration guide. |
| 142 | + |
| 143 | +- [ ] **Replace manual utilities with Swiss Ephemeris natives** — Swap hand-written Julian Day conversion, sidereal time, and degree decomposition with `swe.julday`, `swe.revjul`, `swe.sidtime`, `swe.split_deg`, `swe.deg_midp`. Numeric precision may shift by microseconds. |
| 144 | +- [ ] **Remove v4 backward compatibility layer** — Remove `backword.py` and the four deprecated class aliases (`AstrologicalSubject`, `KerykeionChartSVG`, `NatalAspects`, `SynastryAspects`). Deprecated since v5.0. |
| 145 | +- [ ] **Support BCE dates** — Negative years for historical charts using Swiss Ephemeris native capabilities and precise Delta T calculation (`swe.deltat_ex`). |
| 146 | +- [ ] **Ephemeris file range validation** — Validate at calculation time that the requested date falls within the range covered by the loaded ephemeris files, raising a clear error instead of producing cryptic results. |
| 147 | + |
| 148 | + |
0 commit comments