HomeDocsMoira Roadmap

Moira Roadmap

A living engineering roadmap; planned and historical entries do not themselves define admitted public API or validation status.

Moira Engine — Feature Roadmap & Mathematical Accuracy Register

Engine baseline: 6.1.0 Last reviewed: 2026-07-27 Status: Living engineering roadmap. Individual validation claims are controlled by wiki/03_validation/ and release notes, not by roadmap status. Purpose: Record implemented areas, remaining gaps, and mathematical improvement opportunities without treating planned or historical entries as admitted public API.


Part 0 — Implementation Status

Features implemented since initial roadmap (2026-03-16)

The following items from the original roadmap have been fully implemented and are exposed in the moira package namespace:

#FeatureStatusLocation
1Vertex / Anti-VertexDonehouses.pycalculate_houses() now populates HouseCusps.vertex via _asc_from_armc(armc+90, obliquity, -lat)
2Antiscia & Contra-AntisciaDoneantiscia.pyantiscia(), find_antiscia(), AntisciaAspect
3Parallel & Contra-Parallel aspectsDonedeclination_aspects.py — detection, first-class policy/vessels, and signed applying/separating motion witness; compatibility exports remain in aspects.py
4ParansDoneparans.pyfind_parans(), natal_parans(), Paran, full paran-field analysis suite
5Generic planet returnDonetransits.pyplanet_return()
7Annual ProfectionsDoneprofections.pyannual_profection(), monthly_profection(), profection_schedule(), ProfectionResult
8FirdariaDonetimelords.pyfirdaria(), current_firdaria(), FirdarPeriod
9Vimshottari DashaDonedasha.pyvimshottari(), current_dasha(), dasha_balance(), DashaPeriod
10Nakshatra PositionsDonesidereal.pynakshatra_of(), all_nakshatras_at(), NakshatraPosition
11Zodiacal ReleasingDonetimelords.pyzodiacal_releasing(), current_releasing(), ReleasingPeriod
12Hyleg / AlcocodenDonelongevity.pyfind_hyleg(), calculate_longevity(), HylegResult
14Astrocartography / ACGDoneastrocartography.pyacg_lines(), acg_from_chart(), ACGLine
15Local Space ChartDonelocal_space.pylocal_space_positions()
1690° Dial / MidpointsDonemidpoints.pycalculate_midpoints(), midpoints_to_point(), Midpoint

Additional capabilities present but not in original roadmap

FeatureLocation
Galactic coordinatesgalactic.pygalactic_position_of(), all_galactic_positions()
Uranian / TNP bodiesuranian.pyUranianBody, uranian_at(), all_uranian_at()
Harmonic chartsharmonics.pycalculate_harmonic(), aspect_harmonic_profile(), HARMONIC_PRESETS
Gauquelin sectorsgauquelin.pygauquelin_sector(), all_gauquelin_sectors(), GauquelinPosition
Occultationsoccultations.pyclose_approaches(), lunar_occultation(), CloseApproach
Planetary hoursplanetary_hours.pyplanetary_hours(), PlanetaryHour, PlanetaryHoursDay
Primary directionsprimary_directions.pyfind_primary_arcs(), PrimaryArc
Planetary stationsstations.pyfind_stations(), next_station(), StationEvent
Arabic lunar mansionsmanazil.pymansion_of(), all_mansions_at(), MansionInfo
Sothic cyclesothic.pysothic_rising(), sothic_epochs(), SothicEntry
Jones chart shapeschart_shape.pyclassify_chart_shape(), ChartShape, ChartShapeType
Varga / divisional chartsvarga.pynavamsa(), calculate_varga(), dashamansa(), etc. — wired (moira.__all__, 46 tests)
Heliacal rising / settingfixed_stars.pyheliacal_rising(), heliacal_setting()wired (moira.__all__, 46 tests)
Hayz / in sectdignities.pyis_in_hayz(), is_in_sect(), SectStateKind, SectTruth, SectClassificationwired (moira.__all__, 46 tests)
Harmograms research engineharmograms/ — spectral vectors, zero-Aries parts, intensity spectra, projections, traces, comparison helpers
Harmogram bridge layerbridges/harmograms.py — native chart/progression adapters, body filters, and datetime-range sample builders

Astrodynes / Cosmodynes constitutionalization

Status: bounded natal subsystem and Church of Light progressed subsystem constitutional through their admitted public phases

Reason:

  • Moira can support this structurally as a derived doctrine/scoring subsystem.
  • Astrodyne-Manual.pdf is now in hand and materially unblocks the doctrine.
  • The manual provides the governing scoring rules, worked examples, house-power table, zodiacal and parallel aspect procedures, and harmony/discord rollups.
  • The Church of Light dignity table has been directly confirmed and the earlier Mercury/Virgo transcription error corrected.
  • moira.astrodynes now preserves the raw source tables and derivation truth for house-position power, zodiacal aspects, magnitude parallels, essential dignity, and aspect harmony/discord.

Constraint:

  • Do not implement an approximate or blended "power score" and label it astrodynes/cosmodynes.
  • Keep parity claims bounded to their named evidence. The admitted natal claim is full displayed-output parity for the three captured Church of Light reports under explicit-geometry semantics and the documented tolerances; it is not progressed parity or autonomous reconstruction from printed labels.

Completed constitutional surface:

  • typed classification and inspectability
  • fixed source doctrine and policy
  • aspect, parallel, and mutual-reception relations
  • integrated planet/angle condition profiles
  • source-supported sign and house aggregates
  • source-supported society, trinity, element, and quality summaries
  • three-chart Church of Light displayed-output parity corpus
  • relation network, full-subsystem hardening, backend standard, validation codex, and curated public engine/facade surface
  • typed /v1/astrodynes/doctrine, /geometry, and /chart REST routes with explicit geometry/frame provenance and house-fallback truth
  • source-derived progressed doctrine, full explicit-geometry practical distribution, publication-discrepancy ledger, package/facade exposure, and ten strict /v1/astrodynes/progressed/* routes
  • separate kernel-backed progressed chart adapter deriving Limiting Date, major/minor/transit geometry, progressed angles, terminals, relations, reenforcements, and practical totals from natal and target datetimes
  • bounded progressed-contact search and explicit variable-rate influence quadrature with visible solver and integration policy

Remaining product work is outside the admitted natal and progressed constitutions: autonomous place/time reconstruction for incomplete or contradictory source labels, unbounded prediction/advice products, and any doctrine alternative not established by the sources.

  • Current doctrine and remaining scope are governed by wiki/02_standards/ASTRODYNES_BACKEND_STANDARD.md; the admitted parity claim is recorded in wiki/05_research/astrodynes/astrodynes_three_chart_parity_validation_2026-07-12.md.

Part I — Remaining Open Features

All three original public-surface wiring gaps are now closed. No open Part I items remain from the original roadmap.

6. Heliacal Rising & Setting — public surface gap Done

heliacal_rising() and heliacal_setting() are exported from moira.__all__ and tested in tests/unit/test_public_surface_gaps.py.


13. Hayz / In Sect — public surface gap Done

is_in_hayz(), is_in_sect(), SectStateKind, SectTruth, and SectClassification are exported from moira.__all__ and tested in tests/unit/test_public_surface_gaps.py.


Varga / divisional charts — public surface gap Done

varga.py (navamsa, calculate_varga, dashamansa, dwadashamsa, saptamsa, trimshamsa, VargaPoint) wired into moira.__init__ and moira.__all__; tested in tests/unit/test_public_surface_gaps.py.


Part II — Mathematical Accuracy Improvements

Status reflects work done since the original roadmap entry.

A. Ayanamsa: Star-anchored TRUE_* systems HIGH IMPACTDone

ayanamsa() now routes mode="true" calls for systems in _STAR_ANCHORED through _star_anchored_ayanamsa(), which calls fixed_star_at() for the anchor star at the requested JD and computes star_tropical_lon − target_sidereal.

Affected systems: TRUE_CHITRAPAKSHA (Spica = 180°), TRUE_REVATI (Revati = 0°), ALDEBARAN_15_TAU (Aldebaran = 45°), TRUE_PUSHYA (Asellus Australis = 106.667°).

Ayanamsa.LAHIRI remains epoch-anchored (23°15′00.658″ at 21 Mar 1956), matching SE_SIDM_LAHIRI in SwissEph — Lahiri is not star-anchored by doctrine.

Polynomial mode="mean" path unchanged for all systems (fallback and research).

Verified: Spica sidereal longitude = 180.000° ± 0.001° at J1956, J2000, J2020. Tests: tests/unit/test_sidereal.py (50 tests).


B. Vertex Calculation HIGH IMPACTDone

Vertex is now populated in calculate_houses():

vertex = _asc_from_armc((armc + 90.0) % 360.0, obliquity, -latitude)

C. Topocentric Correction: WGS-84 Elevation Term MEDIUM IMPACTDone

corrections.py::topocentric_correction() already uses the full WGS-84 geodetic model:

  • f = 1.0 / 298.257223563 (WGS-84 flattening)
  • a = EARTH_RADIUS_KM = 6378.137 (equatorial radius, km)
  • elevation converted to km and applied via the standard C/S auxiliary values

The roadmap entry was written before this work was completed.


D. Apparent Sidereal Time: IAU 2006 GAST MEDIUM IMPACTDone

Already fully implemented in julian.py:

  • greenwich_mean_sidereal_time() uses θ_ERA (IAU 2000) as foundation plus the Capitaine et al. (2003) 5th-order polynomial correction (SOFA iauGmst06).
  • _gast_complementary_terms() implements all 9 periodic terms from IERS 2010 Table 5.2c (dominant term 0.00264″ from Moon's node Ω; total ≤ 0.04″).
  • apparent_sidereal_time() computes GAST = GMST + Δψ·cos(ε) + CT.

The roadmap entry was written before this work was completed. Agreement with SOFA iauGmst06 is better than 0.0001″ for 1800–2200.


E. Delta-T: IERS Bulletin data MEDIUM IMPACTDone

_DELTA_T_ANNUAL in julian.py updated with 12-month arithmetic means from USNO deltat.data (source: maia.usno.navy.mil/ser7/deltat.data, fetched 2026-03-22). 2015–2025 are fully observed; 2026 uses the Jan 2026 IERS Bulletin A value (~69.1 s).

Key corrections vs. prior table (observed overestimates):

  • 2022: 69.6 → 69.25 (−0.35 s)
  • 2023: 69.5 → 69.20 (−0.30 s)
  • 2024: 69.4 → 69.17 (−0.23 s)
  • 2025: 69.3 → 69.13 (−0.17 s)

The 1955–2015 blend point was also fixed to reference _DELTA_T_ANNUAL[0] directly rather than a hardcoded literal, so future table updates auto-propagate.


F. Topocentric tag on Chart positions MEDIUM IMPACTDone

PlanetData (in planets.py) already carries is_topocentric: bool = False and planets.py::planet_at() populates it from the _topocentric local at line 589. FixedStar and GaiaStarPosition carry the same field. All three result vessels surface the geocentric/topocentric distinction explicitly.


G. Fixed Star Proper Motion: Epoch and Reference Frame LOW IMPACTDone

fixed_stars.py already handles per-entry epoch correctly:

  • ICRS-tagged entries (Hipparcos-sourced) use _J1991_25 = 2448349.0625 as the propagation start epoch.
  • J2000 and B1950 entries use their stated epochs.
  • pm_ra is stored and applied as μ_α* (i.e. μ_α · cos δ, the reduced form), which is documented in _apply_proper_motion().

The roadmap entry was written before this work was completed.


H. Obliquity: Unify P03 Throughout LOW IMPACTDone

obliquity.py::mean_obliquity() already delegates directly to precession.mean_obliquity_p03 (imported as _mean_obliquity_p03). There is no divergent polynomial — the module docstring explicitly states "IAU 2006 P03 / Capitaine, Wallace & Chapront 2003". The roadmap entry was written before this unification was confirmed.


I. Equation of the Equinoxes: Full Periodic Terms LOW IMPACTDone

julian.py::_gast_complementary_terms() already implements all 9 periodic terms from IERS 2010 Conventions Table 5.2c (reference: SOFA iauEect00). The dominant term (Moon's node Ω) reaches ±0.00264″; the full series sums to ≤0.04″. apparent_sidereal_time() adds these CT terms on top of Δψ·cos(ε). The roadmap entry predated this implementation.


J. Aspects: Stationary Planet State LOW IMPACTDone

aspects.py already defines MotionState with values APPLYING, SEPARATING, STATIONARY, INDETERMINATE, and NONE, plus the aspect_motion_state() function that derives the correct state from any aspect vessel. The bool | None ambiguity is fully resolved.


Part III — Summary Priority Table

Status — all original items closed

All Part I features and Part II math improvements are now done. The table below shows the full historical record; nothing is currently open.

#Feature / ImprovementTypePriorityLocation
6Heliacal rising/settingFeatureDonefixed_stars.py
13Hayz / in sectFeatureDonedignities.py
Varga divisional chartsFeatureDonevarga.py
AAyanamsa: star-anchored TRUE_* systemsMathDonesidereal.py
CTopocentric: WGS-84 elevationMathDonecorrections.py
DApparent sidereal time: IAU 2006 GASTMathDonejulian.py
EDelta-T: IERS Bulletin dataMathDonejulian.py
FTopocentric tag on Chart positionsMathDoneplanets.py
GFixed star proper motion: epoch + parallaxMathDonefixed_stars.py
HObliquity: unify P03 throughoutMathDoneobliquity.py
IEquation of the equinoxes: full periodicMathDonejulian.py
JStationary aspect stateMathDoneaspects.py

Part III-B — New Capabilities Added Post-Audit

FeatureLocationNotes
Multiple star systemsmultiple_stars.py8 systems; Kepler orbital mechanics for VISUAL binaries
Harmograms subsystemharmograms/H1-H5 complete: spectral foundations, intensity doctrine, projection, trace layer, research tooling
Harmogram bridge layerbridges/harmograms.pyEngine-facing adapters for chart/progression sources, body filtering, and range sampling
Harmograms root exportsmoira.__init__Selected stable harmograms types and computation surfaces exported from package root

Multiple Star Systems — multiple_stars.py Done (2026-03-22)

Catalog of 8 astrologically significant multiple star systems with full orbital mechanics for visually resolvable pairs.

Types implemented:

  • VISUAL — Kepler + Thiele-Innes projection: Sirius (50.09-yr), α Centauri (79.91-yr)
  • WIDE — reference separation/PA, period too long for reliable computation: Castor, Mizar, Acrux
  • SPECTROSCOPIC — sub-milliarcsecond separation, unresolvable: Capella (104-day), Spica (4-day)
  • OPTICAL — chance alignment confirmed by Gaia DR3 parallax: Albireo

Catalog:

SystemTypeHighlight
SiriusVISUALSirius B (white dwarf) orbital mechanics; Dogon/esoteric significance
CastorWIDESextuple system — three nested binaries; Gemini's duality made literal
Alpha CentauriVISUALSolar twin + K-dwarf; nearest stars; approaching 2035 periastron
MizarWIDEFirst telescopic binary (1650); first spectroscopic binary (1889)
AlbireoOPTICALGold + sapphire colour contrast; confirmed optical by Gaia DR3
CapellaSPECTROSCOPICTwo G-giant twins, invisible duality; 6th brightest star
AcruxWIDESouthern Cross alpha; two blue B-type giants; navigational anchor
SpicaSPECTROSCOPICBehenian star; tidally distorted ellipsoidal binary in 4-day orbit

Public API: MultiType, StarComponent, OrbitalElements, MultipleStarSystem, angular_separation_at(), position_angle_at(), is_resolvable(), dominant_component(), combined_magnitude(), components_at(), multiple_star(), list_multiple_stars(), multiple_stars_by_type(), sirius_ab_separation_at(), sirius_b_resolvable(), castor_separation_at(), alpha_cen_separation_at()

Chart methods: Moira.multiple_star_separation(), Moira.multiple_star_components()

Future candidates: Antares B (occulted by Moon, Mars-companion hidden star), Theta Orionis (the Trapezium, heart of M42), Epsilon Aurigae (27-yr eclipse binary — already in variable_stars.py, worth cross-linking), Gamma Velorum (WC8+O Wolf-Rayet).


Harmograms Subsystem — harmograms/ Done (2026-04-04)

Mathematically explicit harmograms engine built in visible strata rather than as one opaque score.

Implemented strata:

  • H1 spectral foundations:
    • point-set harmonic vectors
    • zero-Aries parts construction
    • zero-Aries parts harmonic vectors
  • H2 intensity doctrine:
    • named intensity families
    • conjunction inclusion policy
    • explicit normalization and harmonic-domain policy
  • H3 projection layer:
    • explicit spectral projection vessels
    • truncated-realization classification carried visibly
  • H4 trace layer:
    • named trace families
    • time-domain harmogram traces over supplied snapshots
  • H5 research tooling:
    • contributor ranking
    • spectrum comparison
    • trace-series comparison

Admitted intensity families:

  • cosine bell
  • top hat
  • triangular
  • gaussian

Admitted trace families:

  • dynamic zero-Aries parts
  • transit-to-natal zero-Aries parts
  • directed-to-natal zero-Aries parts
  • progressed-to-natal zero-Aries parts

Public engine shape:

  • selected stable types and computation surfaces exported from moira.__init__
  • no facade-first harmogram workflow has been frozen
  • service/workflow orchestration remains intentionally outside the engine core

Bridge layer present:

  • bridges/harmograms.py
  • native Chart / ProgressedChart / mapping adapters
  • explicit body-selection filters
  • progression-family sample builders
  • datetime-range chart sampling builders

This keeps the engine boundary clean:

  • mathematics in moira.harmograms
  • expressive adaptation in moira.bridges
  • no service-layer canonization in moira.facade

Part IV — What Moira Already Has That Swiss Ephemeris Lacks

For reference, capabilities where Moira exceeds the standard Swiss Ephemeris distribution:

  • IAU 2000A full nutation (1,358 luni-solar + 1,056 planetary terms) — SwissEph uses a truncated version in its default mode
  • Classical decanates with admitted Chaldean face, triplicity-decan, and Vedic drekkana computations; the source-reconstructed Gundel/Harley Hermetic name-and-face catalog remains research-only
  • Centaur SPK kernels (Pholus, Chariklo, Asbolus, Hylonome) — SwissEph has fewer
  • TNO kernel support (Quaoar, Varuna, Ixion, Orcus) via SPK Type 13
  • 512 Arabic part / Lot definitions — SwissEph ships far fewer
  • Primary directions (Placidus semi-arc, mundane) — SwissEph requires the swe_dirhut() C function
  • Planetary hours with day/night sunrise and sunset computation
  • Tertiary progressions alongside secondary and solar arc
  • Relativistic aberration and deflection applied uniformly to all bodies
  • Constellations directory (34 constellation star groups)
  • Planetary hours with a full admitted day/night cycle
  • Royal stars, Behenian stars, Pleiades / Hyades as named groups
  • Multiple star systems — Kepler orbital mechanics for visual binaries (Sirius B, α Centauri AB); VISUAL / WIDE / SPECTROSCOPIC / OPTICAL types; 8-system catalog
  • Eclipse Saros classification with heptagonal vertex labelling
  • Jones whole-chart shape classification (all 7 temperament types)
  • Gauquelin sector analysis
  • Vimshottari Dasha with nakshatra balance
  • Zodiacal releasing (Vettius Valens method)
  • Firdaria (Persian/Arabic time-lord system)
  • Astrocartography / ACG lines (MC, IC, ASC, DSC per planet)
  • Local space chart positions
  • Paran field analysis with contour extraction and stability metrics
  • Galactic coordinate system transformations
  • Uranian / transneptunian bodies (Hamburg School TNPs)
  • Harmonic charts with full aspect-harmonic profile
  • Harmograms subsystem with explicit spectral vectors, zero-Aries parts, intensity spectra, projections, and named trace families
  • Varga / divisional charts (navamsa, dashamansa, etc.)
  • Sothic cycle reconstruction (Egyptian calendar anchor)
  • Arabic lunar mansions (manazil, all 28)
  • Hyleg / Alcocoden longevity calculation