-
-
Notifications
You must be signed in to change notification settings - Fork 2
ASTROLOGY_KILLER_TEST_RESULTS
Status: verified in the project .venv
This report records the first dedicated adversarial astrology gauntlet for Moira.
These are not interpretive demonstrations. They are doctrine, boundary, policy, and public-path validation checks for:
- zodiac, house, aspect, and nakshatra boundary behavior
- antiscia, midpoint dial, and Arabic mansion seam behavior
- day/night lot reversal truth
- lot dependency-network determinism
- aspect semantic invariance under input permutation
- dignity sign-boundary discipline
- profection cycle, monthly lord, and activation behavior
- Vimshottari boundary and cycle-failure behavior
- Firdaria and Zodiacal Releasing containment and boundary behavior
- explicit sidereal electional evaluation support
- malformed doctrine-input failure behavior
- public chart vessel truth preservation across derived astrology layers
tests/unit/test_astrology_adversarial_gauntlet.pytests/unit/test_electional.py
python -m pytest tests/unit/test_astrology_adversarial_gauntlet.py -qpython -m pytest tests/unit/test_electional.py -q
All listed commands passed on 2026-04-24.
Measured surfaces:
| Boundary | Assertion |
|---|---|
| Zodiac sign seam |
29.999999999 Aries, 30.0 Taurus, 359.999999999 Pisces, 360.0 Aries |
| House cusp seam | Point just before cusp remains in prior house; exact cusp belongs to opening house |
| Aspect orb seam | Exact allowed-orb sextile is admitted; 0.000001 deg outside is rejected |
| Nakshatra seam | Final instant of first nakshatra remains index 0; exact boundary advances to index 1, pada 1
|
| Arabic mansion seam | Final instant of first mansion remains mansion 1; exact boundary advances to mansion 2
|
| Zodiac wrap |
360.0 deg returns to first sign and first mansion |
Interpretation:
- Core astrology arithmetic honors half-open interval doctrine at sign, house, aspect, and nakshatra boundaries.
- No off-by-one or wraparound bleed was observed in the tested seams.
Measured surfaces:
| Attack | Assertion |
|---|---|
| Antiscion round-trip |
antiscion(antiscion(lon)) == lon mod 360 across seams |
| Contra-antiscion round-trip |
contra(contra(lon)) == lon mod 360 across seams |
| Near-wrap antiscion contact |
359.999999999 -> 180.000000001 detected inside 1e-6 deg
|
| Midpoint seam |
350/10 and 10/350 both midpoint to 0.0 deg
|
| 90-degree dial seam |
90.0 deg folds to 0.0 deg; just-before value remains just before the dial seam |
Interpretation:
- Hidden-point arithmetic is reversible where doctrine requires it.
- Dial folding and shorter-arc midpoint behavior remain coherent at the circular seam.
Fixed synthetic chart:
| Input | Value |
|---|---|
| Ascendant | 100.0 deg |
| Sun | 20.0 deg |
| Moon | 80.0 deg |
Measured doctrine:
| Lot | Day formula result | Night formula result |
|---|---|---|
| Fortune | Asc + Moon - Sun = 160.0 deg |
Asc + Sun - Moon = 40.0 deg |
| Spirit | Asc + Sun - Moon = 40.0 deg |
Asc + Moon - Sun = 160.0 deg |
Truth preservation:
- Day Fortune preserved
effective_add_key == "Moon"andeffective_sub_key == "Sun". - Night Fortune preserved
reversed_for_chart == Truewitheffective_add_key == "Sun"andeffective_sub_key == "Moon".
Interpretation:
- Fortune and Spirit reverse visibly by doctrine.
- The result vessel preserves the computational path rather than merely returning a longitude.
Measured surface:
| Attack | Assertion |
|---|---|
| Reversed planet input order | Same lot-network nodes, edges, isolated set, and most-connected set |
| Network node accounting | Incoming, outgoing, and reciprocal counts remain identical |
| Network edge accounting | Source, target, dependency role, and reciprocal/unilateral mode remain identical |
Interpretation:
- Lot network truth is independent of caller mapping insertion order.
- Derived lot dependencies remain stable as a graph, not merely as isolated longitude results.
Measured surface:
| Attack | Assertion |
|---|---|
| Reversed input insertion order | Same unordered body pairs, aspect names, and orbs |
| Graph profile | Node and edge accounting remains internally consistent |
| Harmonic profile | Chart total equals admitted aspect count; per-body totals match graph degree |
Interpretation:
- Aspect semantics survive input permutation.
- The test intentionally does not require
body1/body2orientation to change; Moira currently preserves caller-discovery orientation in the result vessel.
Measured surface:
| Probe | Result |
|---|---|
Sun at 149.999999999 deg
|
Leo, domicile |
Moon at 150.0 deg
|
Virgo, not domicile |
Interpretation:
- Essential dignity does not bleed across the Leo/Virgo boundary.
- Structured essential-truth metadata agrees with the visible sign.
Measured surface:
| Probe | Result |
|---|---|
Age 0 and age 12
|
Same profected house, sign, lord, and monthly-lord sequence |
Age 13
|
Advances to house 2, Taurus, Venus |
Month 0 at age 13
|
Taurus / Venus |
Month 11 at age 13
|
Aries / Mars |
| Activation seam | Body within 1e-6 deg of profected Asc is admitted; distant body is rejected |
Interpretation:
- Annual profection preserves its 12-year cycle.
- Monthly lord sequence wraps correctly and does not smear activation across a loose boundary.
Measured surface:
| Probe | Result |
|---|---|
| Moon just before nakshatra boundary | First Vimshottari lord |
| Moon exactly at boundary | Second Vimshottari lord |
| Exact-boundary first mahadasha | nakshatra_fraction == 0.0 |
| Query before birth | Explicit ValueError
|
| Unsupported year basis | Explicit ValueError
|
Interpretation:
- Dasha entry is boundary-honest.
- Doctrine settings fail explicitly rather than falling back to an ambient default.
Measured surface:
| Probe | Result |
|---|---|
| Firdaria output | Public validator accepts generated hierarchy |
| Firdaria major sequence | Matches declared diurnal sequence |
| Firdaria total span | Major periods sum to 75.0 years |
| Exact first-major end | Active major advances to next major; half-open interval honored |
| End of 75-year cycle | Explicit ValueError
|
| Zodiacal Releasing output | Public validator accepts level containment through level 3
|
| Invalid ZR level | Explicit ValueError
|
| Invalid lot name | Explicit ValueError
|
Interpretation:
- Time-lord hierarchies preserve containment and half-open boundary doctrine.
- Invalid symbolic doctrine requests fail explicitly.
Measured failures:
| Malformation | Result |
|---|---|
| Incomplete house-cusp map for lots | Explicit ValueError
|
| Strict unresolved-reference policy | Explicit ValueError
|
| Invalid aspect policy orb factor | Explicit ValueError
|
Interpretation:
- Malformed doctrine inputs are rejected before silent substitution.
- Policy failure remains visible to callers.
Measured surface:
| Probe | Result |
|---|---|
| Default tropical policy | Predicate still receives the legacy chart payload |
| Explicit sidereal policy | Predicate receives ElectionalEvaluation
|
| Sidereal planet longitudes | Tropical chart longitudes are converted through declared ayanamsa |
| Sidereal node longitudes | Node longitude view is converted through the same policy |
| Sidereal house cusps | House-cusp view is converted without mutating the chart |
| Policy failures | Invalid frame, mode, or empty sidereal ayanamsa fail explicitly |
Interpretation:
- Electional search is no longer tropical-only when the caller requests a sidereal evaluation frame.
- The underlying chart remains the astronomical truth carrier; sidereal electional work is exposed as an explicit evaluation view.
Measured public path:
| Derived layer | Assertion |
|---|---|
| Lots | Fortune recomputes from chart-carried Asc, Sun, Moon, and sect |
| Aspects | Motion state classification remains in the declared finite enum set |
| Dignities | Every chart-carried planet receives a dignity result |
| Lot network | Node and edge counts match their materialized vessels |
Interpretation:
- Public chart assembly preserves lower-layer astrology truth.
- Derived layers consume the chart vessel without mutating or replacing its carried astronomical positions.
| Challenge | Result | Evidence |
|---|---|---|
| Boundary assassins | Pass | Sign, house, aspect, and nakshatra seams behave cleanly |
| Mirror and dial geometry | Pass | Antiscia, midpoint, dial, and mansion seams behave coherently |
| Lots reversal truth | Pass | Fortune/Spirit day-night reversal and operand truth preserved |
| Lot network determinism | Pass | Dependency graph survives reversed input order |
| Aspect permutation attack | Pass | Semantic aspect set survives reversed input order |
| Dignity boundary discipline | Pass | Domicile does not bleed across Leo/Virgo seam |
| Profection cycle attack | Pass | 12-year return, monthly wrap, and activation seam hold |
| Vimshottari boundary doctrine | Pass | Nakshatra lord transition and failure modes are explicit |
| Timelord containment attack | Pass | Firdaria and Zodiacal Releasing validate hierarchy and boundaries |
| Electional sidereal evaluation | Pass | Sidereal predicate view exists without mutating chart substrate |
| Malformed doctrine inputs | Pass | Bad policies and incomplete inputs fail visibly |
| Public chart truth preservation | Pass | Lots, aspects, dignities, and lot network stay coherent from chart vessel |
Bottom line
Moira now has a dedicated adversarial astrology killer-test layer. It does not pretend interpretive doctrine is a physical oracle. It proves the appropriate thing: explicit doctrine, clean boundaries, visible policy, deterministic semantic behavior, and public-path truth preservation.