HomeValidationValidation Report — Experimental

Validation Report — Experimental

Validation and partial-closure records for experimental, modernized, or mixed-oracle computation surfaces.

Moira Experimental Validation

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:

  • inherited astronomical validation from lower layers
  • doctrine and mathematical invariants
  • curated external references where a real oracle exists
  • explicit disclosure when a subsystem is still only partially validated

The goal is truthfulness, not false symmetry with the core astronomy and astrology validation docs.

0.1 Current Rerun Receipt

On 2026-05-21, the live experimental corpus named in this document was re-run from the project .venv.

Current corpus result:

  • 717 collected
  • 716 passed
  • 1 failed

Current live failure:

  • tests/unit/test_moira_synastry.py::test_davison_chart_matches_midpoint_time_and_location_chart_cast
    • Davison chart longitude output does not currently match the midpoint-time chart cast assumed by that validation test

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.


1. Status Table

DomainValidation basisStatus
Sovereign fixed-star positionssovereign 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.pyValidated
Stellar quality mappingboundary and vessel tests in the sovereign star suite; no external oracle exists for the interpretive mapping itselfValidated
Variable starscatalog 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.pyValidated
Extended physical bodiesHorizons / kernel-backed fixture suites for TNOs, centaurs, asteroids, and selected minor bodiesValidated
Galactic transforms and reference pointsinvariant tests in tests/unit/test_experimental_validation.py plus Astropy/ERFA oracle audit in tests/integration/test_galactic_oracle_reference.pyValidated
Uranian bodies / Transplutolocked formulas and range checks in tests/unit/test_experimental_validation.pyValidated
Astrocartographydedicated geometry and wrapper suite in tests/unit/test_astrocartography.py plus validated planetary positionsValidated
Local spacededicated spherical-astronomy and wrapper suite in tests/unit/test_local_space.py plus validated topocentric positionsValidated
Longevitydoctrine tables and scoring logic in tests/unit/test_experimental_validation.pyValidated
Timelordsdoctrine and structural invariants in tests/unit/test_experimental_validation.py, tests/unit/test_timelords.py, and tests/unit/test_timelords_public_api.pyValidated
Gauquelin sectorscanonical diurnal-arc logic in tests/unit/test_experimental_validation.pyValidated
Arabic lunar mansions (Manazil)equal-station arithmetic and boundary tests in tests/unit/test_experimental_validation.pyValidated
Varga divisionsexplicit geometric-division doctrine tests in tests/unit/test_varga.pyValidated
Synastry compositesmidpoint, overlay, composite, Davison, and public-surface coverage in tests/unit/test_moira_synastry.py and tests/unit/test_synastry_public_api.pyPartial (live Davison failure)
Sothic cycledoctrine, policy, profile structure, and public-surface checks in tests/unit/test_sothic.py and tests/unit/test_sothic_public_api.pyValidated
Multiple star systemsdedicated 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.pyValidated

2. Validation Philosophy

Experimental subsystems do not all admit the same kind of truth claim.

  • Some are physically anchored and can inherit real astronomy validation.
  • Some are computationally novel and are best validated by doctrine, invariants, and explicit policy surfaces.
  • Some are modern interpretive layers with no meaningful external oracle.
  • A few are still under-validated and are marked that way directly.

Moira should not claim stronger validation than the subsystem actually has.


3. Sovereign Star and Stellar Extensions

3.1 Sovereign fixed-star positions

Current state:

  • the named-star engine is now fully sovereign and is sourced from moira/data/star_registry.csv, moira/data/star_lore.json, and moira/data/star_provenance.json
  • executable dependence on Gaia loaders and Swiss star files has been removed
  • catalog loading, name/nomenclature routing, search ordering, magnitude filtering, and exact-case Bayer collision handling are explicitly covered in tests/unit/test_stars_sovereign_catalog.py and tests/integration/test_stars_sovereign_identity.py
  • the full catalog now validates cleanly after resolving the 19 Bayer case-collision rows that had previously poisoned the stored J2000 ecliptic reference columns

External 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 rotation
  • tests/integration/test_stars_external_reference.py audits the same anchor stars against an offline Swiss swetest fixture generated by scripts/build_stars_swetest_fixture.py
  • the internal sovereign catalog sweep checks all 1809 stars at J2000 against the stored registry reference columns

Status: Validated

Measured residuals:

  • internal sovereign J2000 sweep against registry reference columns: worst residual 0.003971602 deg (14.30") in longitude for ome Dra; latitude residuals are materially smaller
  • ERFA anchor oracle across Sirius, 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")
  • ERFA full-catalog J2000 sweep: no large outliers remain after the case-routing repair; the remaining differences are at numerical-noise scale
  • Swiss audit across the same anchor matrix: worst residual 0.007512431 deg (27.04") in longitude for Sirius at J1900; this residual is not materially driven by TT-vs-UT alignment

What this means:

  • against ERFA, the sovereign star engine is now effectively at numerical-noise scale on the audited anchor set
  • against Swiss, the remaining difference is on the order of a few hundredths of a degree at worst and reflects model/convention differences rather than a Delta T defect
  • the catalog is now internally coherent end to end under both sovereign and ERFA sweeps

3.2 Stellar quality mapping

This layer is interpretive rather than astronomical, but it remains explicitly bounded by unit coverage in the sovereign star suite.

Covered:

  • NaN handling
  • boundary transitions between declared BP-RP ranges
  • resulting StellarQuality vessel semantics on sovereign FixedStar results

Status: Validated

What this does not mean:

  • there is still no external oracle for the interpretive mapping itself
  • the validation claim is that Moira's declared mapping is implemented correctly and consistently

3.3 Variable stars

Validated in tests/unit/test_variable_stars.py and tests/integration/test_variable_stars_external_reference.py.

What is covered:

  • catalog integrity
  • phase arithmetic
  • light-curve shape expectations by variable-star type
  • next-minimum / next-maximum helpers
  • type filters and convenience APIs
  • external ephemeris spot checks for:
    • Algol against AAVSO VSX epoch-of-minimum and period
    • Delta Cephei against published GCVS epoch-of-maximum and period
    • Eta Aquilae against published GCVS epoch-of-maximum and period
  • forward minima prediction against the external linear ephemeris for Algol

Status: Validated

External comparison numbers:

  • Algol (bet Per, AAVSO VSX):
    • external epoch of minimum: HJD 2455565.33243
    • Moira epoch of minimum: 2455565.33243
    • epoch delta: 0.0 d
    • external period: 2.867323862 d
    • Moira period: 2.867323862 d
    • period delta: 0.0 d
  • Delta Cephei (del Cep, GCVS):
    • external epoch of maximum: JD 2436075.445
    • Moira epoch of maximum: 2436075.445
    • epoch delta: 0.0 d
    • external period: 5.366341 d
    • Moira period: 5.366341 d
    • period delta: 0.0 d
  • Eta Aquilae (eta Aql, GCVS):
    • external epoch of maximum: JD 2436084.656
    • Moira epoch of maximum: 2436084.656
    • epoch delta: 0.0 d
    • external period: 7.176641 d
    • Moira period: 7.176641 d
    • period delta: 0.0 d

Observed agreement in the external suite:

  • catalog ephemeris agreement for all three spot-check stars: exact match to the cited published values
  • Algol forward linear-minimum prediction: exact to floating-point precision in the offline test corpus

3.4 Multiple star systems

Validated in tests/unit/test_multiple_stars.py and tests/integration/test_multiple_stars_external_reference.py.

Covered:

  • catalog lookup by name, designation, and alias
  • type-specific behavior for visual, wide, spectroscopic, and optical systems
  • time-varying visual-binary separation for Sirius and Alpha Centauri
  • fixed reference behavior for wide and optical systems
  • Dawes-limit resolvability logic, including the inclusive boundary
  • dominant-component selection
  • combined-magnitude flux-sum doctrine
  • full snapshot structure from components_at()
  • named convenience functions and Moira wrapper methods
  • public surface exposure from both moira.multiple_stars and top-level moira

Status: Validated

Truth basis:

  • this subsystem is currently validated by published catalog/orbital doctrine plus explicit invariant tests
  • Sirius AB now also has a dedicated external spot check against a published yearly orbit ephemeris

Representative computed values from the current validated corpus:

  • Sirius (visual):
    • JD 2451545.0: separation 4.6236436381"; position angle 149.7428251338 deg
    • JD 2458849.5: separation 11.2280299559"; position angle 68.2561769339 deg
    • combined magnitude: -1.4601190421
  • Alpha Centauri (visual):
    • JD 2451545.0: separation 14.2571111404"; position angle 222.1788135176 deg
    • JD 2464328.5: separation 6.4073379950"; position angle 34.4508871197 deg
    • combined magnitude: -0.2719470331
  • Castor (wide):
    • reference separation 3.9"; reference position angle 52.0 deg
    • combined magnitude: 1.5759885857
  • Albireo (optical):
    • reference separation 34.4"; reference position angle 54.0 deg
    • combined magnitude: 2.9329843961
  • Capella (spectroscopic):
    • separation 0.0"; position angle 0.0 deg
    • combined magnitude: 0.0798366601
  • Spica (spectroscopic):
    • separation 0.0"; position angle 0.0 deg
    • combined magnitude: 0.8868955636

Observed agreement in the validation suite:

  • Sirius AB published orbit ephemeris comparison:
    • 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 deg
    • 2020-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 deg
    • 2030-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 deg
  • Sirius and Alpha Centauri separations are strictly positive and vary across multi-decade epochs, confirming live Kepler/Thiele-Innes behavior
  • Castor and Albireo separation / position-angle outputs are time-invariant at their declared reference values
  • Capella and Spica remain fixed at 0.0" separation and are never resolvable
  • combined magnitudes match the declared flux-sum formula to within 1e-9

4. Extended Physical Bodies

This area is much stronger than the previous version of this document implied.

Validated areas include curated fixture-based coverage for:

  • TNOs
  • centaurs
  • classical asteroids
  • broader main-belt bodies
  • selected small-body kernels such as Pandora, Amor, Apollo, Icarus, Karma, and Persephone

These validations are grounded in the same Horizons / kernel-based astronomy work used elsewhere in the repo.

Status: Validated


5. Galactic and Uranian Layers

5.1 Galactic transforms

Validated in tests/unit/test_experimental_validation.py and tests/integration/test_galactic_oracle_reference.py.

Covered:

  • rotation behavior
  • round-trip consistency
  • canonical galactic center and north galactic pole reference behavior
  • direct ICRS <-> Galactic comparison against Astropy's external frame transform
  • true-of-date ecliptic bridge audit using explicit ecliptic geometry, ERFA pnm06a, and Astropy's Galactic frame as the final oracle

Status: Validated

Measured residuals:

  • direct 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 check
  • ecliptic_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 -> ecliptic

Important scope note:

  • this galactic audit is indexed by jd_tt directly, so the residual envelope does not presently indicate a Delta-T-model limitation
  • the time-dependent term here is the of-date/J2000 frame bridge

5.2 Uranian bodies and Transpluto

Validated in tests/unit/test_experimental_validation.py.

Covered:

  • locked formula output
  • daily-motion expectations
  • range and structural sanity

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.


6. Derived Geometric Techniques

6.1 Astrocartography

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:

  • MC / IC antipodal meridian logic
  • ASC / DSC symmetry about the MC meridian
  • zero-declination special case, where rising and setting reduce to fixed meridians
  • high-declination circumpolar omission behavior
  • line-vessel structure and repr shape
  • acg_from_chart() wrapper plumbing for apparent sidereal time and RA/Dec collection

Status: Validated

Important scope note:

  • this validates the geographic line engine
  • Moira does not implement a separate rendered world-map projection layer here, so a map-image oracle is not the relevant validation target for this module

6.2 Local space

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:

  • equatorial cardinal cases for zenith, nadir, east, and west horizon points
  • north/south meridian cases at nonzero latitude
  • azimuth sorting
  • 8-point compass labeling
  • LocalSpacePosition repr and above/below-horizon semantics
  • local_space_from_chart() wrapper plumbing for sidereal time and RA/Dec collection

Status: Validated


7. Traditional-Experimental Boundary Techniques

7.1 Longevity

Validated in tests/unit/test_experimental_validation.py.

Covered:

  • Ptolemaic years
  • face rulers
  • Egyptian bounds
  • triplicity support
  • dignity scoring
  • hyleg selection priority
  • longevity band selection

Status: Validated

7.2 Timelords

Validated across tests/unit/test_experimental_validation.py and tests/unit/test_timelords.py.

Covered:

  • Firdaria sequence structure
  • sub-period grouping
  • Zodiacal Releasing minor-year table behavior
  • active-period and profile helpers

Status: Validated

7.3 Gauquelin sectors

Validated in tests/unit/test_experimental_validation.py.

Covered:

  • normal-geometry sector range and half-open boundaries
  • primary plus-zone classification after rise and upper culmination
  • explicit undefined-sector semantics for non-rising geometry
  • field integrity, polar singularities, and horizon-altitude bounds

Status: Validated

7.4 Arabic lunar mansions

Validated in tests/unit/test_experimental_validation.py.

Covered:

  • mansion span arithmetic
  • boundary advancement
  • wraparound
  • all 28 mansions reachable

Status: Validated

7.5 Varga divisions

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.py

Covered:

  • D1 identity behavior
  • segment-to-sign advancement at exact division boundaries
  • degree reset at segment boundaries
  • 360-degree periodicity
  • scaled remainder mapping for degree-within-varga-sign
  • convenience-function naming and divisor preservation
  • output range invariants across multiple divisors
  • declared geometric return-vessel behavior

Status: Validated

Important scope note:

  • this validates Moira's declared geometric varga engine
  • it does not claim full equivalence to sign-offset doctrines used by JHora or other specialized Jyotish software

7.6 Synastry composites

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.py
  • tests/unit/test_synastry_public_api.py

Covered:

  • midpoint composite construction
  • shortest-arc midpoint behavior across seams
  • directional and mutual house overlays
  • synastry aspect/contact truth and condition-profile layers
  • Davison chart doctrine variants and public-surface exposure
  • policy handling and input guards

Current rerun truth:

  • one live failure remains in test_davison_chart_matches_midpoint_time_and_location_chart_cast
  • therefore the subsystem cannot currently be described as cleanly validated at main, even though most of the synastry surface is covered

Status: Partial


8. Sothic Cycle

tests/unit/test_sothic.py provides a real validation surface for the Sothic subsystem.

Covered:

  • Egyptian civil-date logic
  • annual Sothic rising result structure
  • epoch filtering behavior
  • drift-rate and prediction helpers
  • policy validation
  • condition-profile and network-profile structure

Status: Validated

This remains a doctrine/model subsystem rather than a mainstream external software-comparison subsystem.


9. Remaining Work

The main experimental items that still need attention are:

  1. 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.

  2. 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.

  3. 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.


10. Practical Reading

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.