Version: 2.1 Date: 2026-05-21 Runtime target: Python 3.14
This document covers Moira subsystems that are experimental, modernized, or not normally validated against a single canonical astrology package. In this layer, the validation standard is a mix of:
The goal is truthfulness, not false symmetry with the core astronomy and astrology validation docs.
On 2026-05-21, the live experimental corpus named in this document was re-run
from the project .venv.
Current corpus result:
717 collected716 passed1 failedCurrent live failure:
tests/unit/test_moira_synastry.py::test_davison_chart_matches_midpoint_time_and_location_chart_cast
This means most experimental surfaces remain healthy, but the paper cannot
truthfully claim a clean all-green validation state for synastry composites at
main until that failure is resolved or the test doctrine is corrected.
| Domain | Validation basis | Status |
|---|---|---|
| Sovereign fixed-star positions | sovereign catalog/schema/search tests in tests/unit/test_stars_sovereign_catalog.py, identity tests in tests/integration/test_stars_sovereign_identity.py, Swiss audit in tests/integration/test_stars_external_reference.py, and SOFA/ERFA audit in tests/integration/test_stars_erfa_reference.py |
Validated |
| Stellar quality mapping | boundary and vessel tests in the sovereign star suite; no external oracle exists for the interpretive mapping itself | Validated |
| Variable stars | catalog integrity, phase arithmetic, light-curve behavior, extremum helpers in tests/unit/test_variable_stars.py, plus external ephemeris spot checks for Algol (AAVSO VSX), Delta Cephei, and Eta Aquilae (GCVS) in tests/integration/test_variable_stars_external_reference.py |
Validated |
| Extended physical bodies | Horizons / kernel-backed fixture suites for TNOs, centaurs, asteroids, and selected minor bodies | Validated |
| Galactic transforms and reference points | invariant tests in tests/unit/test_experimental_validation.py plus Astropy/ERFA oracle audit in tests/integration/test_galactic_oracle_reference.py |
Validated |
| Uranian bodies / Transpluto | locked formulas and range checks in tests/unit/test_experimental_validation.py |
Validated |
| Astrocartography | dedicated geometry and wrapper suite in tests/unit/test_astrocartography.py plus validated planetary positions |
Validated |
| Local space | dedicated spherical-astronomy and wrapper suite in tests/unit/test_local_space.py plus validated topocentric positions |
Validated |
| Longevity | doctrine tables and scoring logic in tests/unit/test_experimental_validation.py |
Validated |
| Timelords | doctrine and structural invariants in tests/unit/test_experimental_validation.py, tests/unit/test_timelords.py, and tests/unit/test_timelords_public_api.py |
Validated |
| Gauquelin sectors | canonical diurnal-arc logic in tests/unit/test_experimental_validation.py |
Validated |
| Arabic lunar mansions (Manazil) | equal-station arithmetic and boundary tests in tests/unit/test_experimental_validation.py |
Validated |
| Varga divisions | explicit geometric-division doctrine tests in tests/unit/test_varga.py |
Validated |
| Synastry composites | midpoint, overlay, composite, Davison, and public-surface coverage in tests/unit/test_moira_synastry.py and tests/unit/test_synastry_public_api.py |
Partial (live Davison failure) |
| Sothic cycle | doctrine, policy, profile structure, and public-surface checks in tests/unit/test_sothic.py and tests/unit/test_sothic_public_api.py |
Validated |
| Multiple star systems | dedicated unit suite for catalog lookup, orbital behavior, resolvability, magnitudes, wrappers, and public surface, plus Sirius AB orbit spot checks against a published yearly ephemeris in tests/integration/test_multiple_stars_external_reference.py |
Validated |
Experimental subsystems do not all admit the same kind of truth claim.
Moira should not claim stronger validation than the subsystem actually has.
Current state:
moira/data/star_registry.csv, moira/data/star_lore.json, and
moira/data/star_provenance.jsontests/unit/test_stars_sovereign_catalog.py and
tests/integration/test_stars_sovereign_identity.pyExternal reference coverage:
tests/integration/test_stars_erfa_reference.py
uses an independent SOFA/ERFA path built from registry RA/Dec, proper motion,
and parallax via erfa.pmsafe, erfa.pnm06a, and true-obliquity rotationtests/integration/test_stars_external_reference.py
audits the same anchor stars against an offline Swiss swetest fixture
generated by scripts/build_stars_swetest_fixture.pyStatus: Validated
Measured residuals:
0.003971602 deg (14.30") in longitude for ome Dra; latitude
residuals are materially smallerSirius, Algol, Spica, and Aldebaran from
J1000 to J3000: worst residual 0.000000133772 deg (0.00048") in
longitude for Sirius; worst latitude residual 0.000000006849 deg
(0.000025")0.007512431 deg
(27.04") in longitude for Sirius at J1900; this residual is not
materially driven by TT-vs-UT alignmentWhat this means:
This layer is interpretive rather than astronomical, but it remains explicitly bounded by unit coverage in the sovereign star suite.
Covered:
StellarQuality vessel semantics on sovereign FixedStar resultsStatus: Validated
What this does not mean:
Validated in tests/unit/test_variable_stars.py and
tests/integration/test_variable_stars_external_reference.py.
What is covered:
Status: Validated
External comparison numbers:
bet Per, AAVSO VSX):
HJD 2455565.332432455565.332430.0 d2.867323862 d2.867323862 d0.0 ddel Cep, GCVS):
JD 2436075.4452436075.4450.0 d5.366341 d5.366341 d0.0 deta Aql, GCVS):
JD 2436084.6562436084.6560.0 d7.176641 d7.176641 d0.0 dObserved agreement in the external suite:
Validated in tests/unit/test_multiple_stars.py and
tests/integration/test_multiple_stars_external_reference.py.
Covered:
components_at()Moira wrapper methodsmoira.multiple_stars and top-level moiraStatus: Validated
Truth basis:
Representative computed values from the current validated corpus:
visual):
JD 2451545.0: separation 4.6236436381"; position angle 149.7428251338 degJD 2458849.5: separation 11.2280299559"; position angle 68.2561769339 deg-1.4601190421visual):
JD 2451545.0: separation 14.2571111404"; position angle 222.1788135176 degJD 2464328.5: separation 6.4073379950"; position angle 34.4508871197 deg-0.2719470331wide):
3.9"; reference position angle 52.0 deg1.5759885857optical):
34.4"; reference position angle 54.0 deg2.9329843961spectroscopic):
0.0"; position angle 0.0 deg0.0798366601spectroscopic):
0.0"; position angle 0.0 deg0.8868955636Observed agreement in the validation suite:
2000-01-01 (JD 2451544.5):
published rho=4.460", theta=151.2 deg;
Moira rho=4.6231468665", theta=149.7581702725 deg;
residuals +0.1631468665", -1.4418297275 deg2020-01-01 (JD 2458849.5):
published rho=11.193", theta=68.1 deg;
Moira rho=11.2280299559", theta=68.2561769339 deg;
residuals +0.0350299559", +0.1561769339 deg2030-01-01 (JD 2462502.5):
published rho=10.392", theta=48.9 deg;
Moira rho=10.3807681631", theta=48.8288701968 deg;
residuals -0.0112318369", -0.0711298032 deg0.0" separation and are never resolvable1e-9This area is much stronger than the previous version of this document implied.
Validated areas include curated fixture-based coverage for:
These validations are grounded in the same Horizons / kernel-based astronomy work used elsewhere in the repo.
Status: Validated
Validated in tests/unit/test_experimental_validation.py and
tests/integration/test_galactic_oracle_reference.py.
Covered:
pnm06a, and Astropy’s Galactic frame as the final oracleStatus: Validated
Measured residuals:
equatorial_to_galactic() / galactic_to_equatorial() oracle checks
stay below 0.1" on the audited cases, with worst measured residual
0.0658" at the North Galactic Pole oracle checkecliptic_to_galactic() / galactic_to_ecliptic() audited through the
ERFA/Astropy bridge stay below 0.1" across the audited span from
500 BCE to 2100 CE; the broader sweep produced worst measured residuals
of 0.0318" for ecliptic -> galactic and 0.0319" for galactic -> eclipticImportant scope note:
jd_tt directly, so the residual envelope
does not presently indicate a Delta-T-model limitationValidated in tests/unit/test_experimental_validation.py.
Covered:
Status: Validated
This is still a model-defined subsystem. Differences from other Uranian packages are treated as model differences unless Moira violates its own stated formula basis.
astrocartography.py derives line geometry from already validated planet
positions, and now has its own dedicated validation surface in
tests/unit/test_astrocartography.py.
Covered:
acg_from_chart() wrapper plumbing for apparent sidereal time and RA/Dec
collectionStatus: Validated
Important scope note:
local_space.py derives azimuth/altitude outputs from validated topocentric
positions and now has its own dedicated validation surface in
tests/unit/test_local_space.py.
Covered:
LocalSpacePosition repr and above/below-horizon semanticslocal_space_from_chart() wrapper plumbing for sidereal time and RA/Dec
collectionStatus: Validated
Validated in tests/unit/test_experimental_validation.py.
Covered:
Status: Validated
Validated across tests/unit/test_experimental_validation.py and
tests/unit/test_timelords.py.
Covered:
Status: Validated
Validated in tests/unit/test_experimental_validation.py.
Covered:
Status: Validated
Validated in tests/unit/test_experimental_validation.py.
Covered:
Status: Validated
varga.py explicitly implements the standard geometric-division model, not the
full set of sign-specific Parasari special rules used by some Jyotish
software. The correct validation target is therefore the geometric doctrine
the module actually declares.
Validated in:
tests/unit/test_varga.pyCovered:
Status: Validated
Important scope note:
The previous status here was too strong in one respect and too weak in another.
Live validation surfaces now reside in:
tests/unit/test_moira_synastry.pytests/unit/test_synastry_public_api.pyCovered:
Current rerun truth:
test_davison_chart_matches_midpoint_time_and_location_chart_castmain, even though most of the synastry surface is coveredStatus: Partial
tests/unit/test_sothic.py provides a real validation surface for the Sothic
subsystem.
Covered:
Status: Validated
This remains a doctrine/model subsystem rather than a mainstream external software-comparison subsystem.
The main experimental items that still need attention are:
Synastry composites
The live rerun found one failing Davison test in tests/unit/test_moira_synastry.py.
That must be resolved or doctrinally reclassified before the subsystem can be
restored to a clean validated state.
Sovereign fixed-star breadth The core oracle path already exists via SOFA/ERFA and offline Swiss fixtures. Remaining work is narrower: broaden the published-anchor corpus beyond the current star set if a richer external published reference set is desired.
Optional external spot checks Astrocartography and local space are geometry-validated internally, but software-to-software spot checks would still be useful as supplemental corroboration if a clean declared reference is available.
These are the real remaining gaps. Everything else listed as validated above already has a concrete test surface in the repo.
Interpret the status labels strictly:
Validated There is a real enforcement surface in the repo appropriate to the subsystem.
Partial There is meaningful coverage, but an important dedicated validation layer is still missing.
Documented The subsystem is intentionally model-defined and transparent, but not externally validated in the usual sense.
Needs validation The implementation exists, but the repo still lacks an adequate validation suite for it.