Skip to content

Commit e4bd8e8

Browse files
committed
docs: rewrite TODO.md with verified roadmap, mark completed items
1 parent 3370c80 commit e4bd8e8

1 file changed

Lines changed: 131 additions & 27 deletions

File tree

TODO.md

Lines changed: 131 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,32 +13,136 @@
1313
- 🟧 Medium
1414
- 🟨 Low
1515

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+
1681
---
1782

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

Comments
 (0)