Version: 2.2 Date: 2026-07-25 Runtime target: Python 3.14
Recent release evidence for the bounded Gauquelin, eclipse cartography, house-boundary geometry, node-frame, asteroid-family, and small-body readiness products is indexed in the 5.1-5.2 release validation ledger.
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 typed cosmic reference points | invariant tests in tests/unit/test_experimental_validation.py and tests/unit/test_cosmic_references.py plus Astropy/ERFA oracle audit in tests/integration/test_galactic_oracle_reference.py |
Validated |
| Uranian bodies / Transpluto | source-family and Kepler invariants in tests/unit/test_uranian.py; five-epoch, all-nine-body Astrodienst cross-engine matrix in tests/oracle/test_uranian_oracle.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 oracleSupergalactic frameStatus: 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 -> ecliptic0.1"
against Astropy, with worst measured residual 0.0305" at the longitude
originImportant scope note:
jd_tt directly, so the residual envelope
does not presently indicate a Delta-T-model limitationValidated in tests/unit/test_uranian.py and
tests/oracle/test_uranian_oracle.py.
Covered:
Status: Validated
The frozen Astrodienst swetest matrix is secondary cross-engine
corroboration, not a runtime dependency or physical-body authority. The
hypothetical orbits remain model-defined; DE441 supplies only Earth/Sun
observer geometry.
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.