nine_parts_roadmap - TheDaniel166/moira GitHub Wiki
Nine Parts Roadmap
Purpose
This document defines the implementation roadmap for Moira's Nine Parts subsystem.
It assumes the companion doctrine document exists:
This is an additive roadmap, not a refactor-first roadmap. The lot engine
in moira/lots.py already provides the full arc-formula infrastructure. The
work is scoped to: cataloguing the seven externally evidenced Abu Ma'shar lots
as the historical core, preserving the Sword and Node as admitted extensions,
and providing a dedicated query surface.
The Vedic Navamsha is treated as a separate implementation track within this same roadmap because it shares only the number nine with the Abu Ma'shar lots β not the formula engine.
Current Moira State
Relevant implementation file: moira/lots.py
Current admitted capability relevant to Nine Parts:
~430+named lots inPARTS_DEFINITIONS- Full arc-formula engine:
Asc + A β B mod 360Β° - Automatic day/night reversal per
PartDefinition.reversibleflag - Fortune and Spirit pre-computed before derived lots (dependency order already handled)
ArabicPartsServiceβ service class for computing lots from a chartcalculate_lots()β module-level convenience wrapper
Lots from Abu Ma'shar's Nine Parts already in the catalogue:
| Abu Ma'shar Part | Existing Entry | Formula Match | Reversal |
|---|---|---|---|
| Fortune | "Fortune" |
Moon β Sun | β |
| Spirit | "Spirit" |
Sun β Moon | β |
| Love | "Eros (Valens)" |
Spirit β Fortune | β |
| Necessity | "Necessity (Valens)" |
Fortune β Spirit | β |
| Courage | "Courage" |
Fortune β Mars | β |
| Victory | "Victory" |
Jupiter β Spirit | β |
| Nemesis | "Nemesis" |
Fortune β Saturn | β |
| The Sword | not named "Sword" | Mars β Saturn | β (via other entries) |
| The Node | not present | Node β Moon | β |
Gap summary:
The Swordβ the Mars β Saturn formula exists under other names (e.g.,"Death (Persian)","Enemies (Ancients/Olympiodorus A)"); no entry named with Abu Ma'shar's intentThe Nodeβ the formulaAsc + Node β Moon(reversible) is not yet in the catalogue- No named group or tag identifies the Abu Ma'shar Nine Parts as a set
- No dedicated
nine_parts_abu_mashar()query function exists
Current constitutional status for Nine Parts: P0 β pre-constitutionalization.
Core Insight
The lot engine does not need to change. The Nine Parts work is:
- add two missing
PartDefinitionentries toPARTS_DEFINITIONS - tag or group the nine Abu Ma'shar entries so they can be queried as a set
- add a convenience function that returns the nine parts for a chart
- hold the Vedic Navamsha as a separate implementation track (different module, different data model)
Truth Domain Axes
Historical scope note:
- The seven planetary lots are the evidenced Abu Ma'shar core supported by the currently secured Dykes-facing source trail.
The SwordandThe Nodeare retained as admitted extensions within the same computational family, but not claimed at the same evidentiary level.
1. Technique Family
Governs which Nine Parts system is being computed.
Values:
abu_masharβ nine Hermetic lots (7 planetary + 2 nodal) per Abu Ma'shar / Dykes; uses the existinglots.pyarc enginenavamshaβ Vedic 9-fold sign subdivision; does not use the arc engine; separate module
These must not share a computation path.
2. Reversal Rule (abu_mashar only)
Governs which formula column is used.
Value (confirmed, no ambiguity):
full_reversalβ all nine parts reverse for night births; night = Sun in houses 1β6; no per-lot exceptions in Abu Ma'shar
3. Dependency Order (abu_mashar only)
Fortune and Spirit must be computed before Love and Necessity. This is already
handled by lots.py's pre-computation block.
4. Ruler Assignment Rule (navamsha only)
Governs which sign begins each sign's nine-part sequence.
Values:
from_element_cardinalβ Vedic standard: fire β Aries, earth β Capricorn, air β Libra, water β Cancer
Implementation Phases
Phase 1 β Abu Ma'shar Nine Parts (lots.py extension)
Scope: add the two missing entries and a named-set query surface.
Tasks:
- Add
PartDefinition("The Sword", "Mars", "Saturn", True, "abu_mashar")toPARTS_DEFINITIONS - Add
PartDefinition("The Node", "North Node", "Moon", True, "abu_mashar")toPARTS_DEFINITIONS - Add
"abu_mashar"as a source tag on the existing seven lots that form the Nine Parts set (Fortune, Spirit, Eros/Love, Necessity (Valens), Courage, Victory, Nemesis) β or add an explicit alias list - Add
nine_parts_abu_mashar(chart) -> list[ArabicPart]tolots.pyreturning the nine parts in canonical order
Naming note for "Love":
Abu Ma'shar's Part of Love corresponds to the Eros (Valens) formula
(Spirit β Fortune). Do not rename the existing "Eros (Valens)" entry.
The nine_parts_abu_mashar() function should return it under Abu Ma'shar's
name "Love" via an alias field or by mapping in the function output.
Acceptance criteria:
nine_parts_abu_mashar(chart)returns exactly 9ArabicPartresults- all 9 use the night formula when Sun is in houses 1β6
- Fortune and Spirit are computed before Love and Necessity (already guaranteed by existing pre-computation logic)
- The Sword and The Node are present with correct formulas and reversal
constitutional target: P1 COMPLETE after this phase.
No changes to: the arc engine, the reversal logic, or any other lot entries. Purely additive.
Phase 2 β Al-Sijzi Transfer of Management
Scope: dynamic management mechanics on top of the static lot positions.
Prerequisite: Phase 1 complete; longevity.py intersection interface designed (see below).
Tasks:
- Define the
LotManagementvessel: lord of the part, itissΔl chain, tasyΔ«r position for a given year - Add
lot_management(part, chart, date) -> LotManagementfunction - Define the feminine-sign condition: if the Part falls in a feminine sign at night, flag the management condition (Al-Sijzi nuance β affects interpretation, not the arc calculation)
- Document the longevity.py intersection point: Al-Sijzi's Part-based
Hyleg refinement touches
find_hyleg()inlongevity.py; the interface should be additive, not a modification of the existing Hyleg logic
constitutional target: P2 COMPLETE after this phase.
Phase 3 β Vedic Navamsha
Scope: separate 9-fold sign subdivision implementation.
Module: new file moira/navamsha.py or extension of moira/varga.py
(check whether varga.py already handles D9).
Tasks:
- Check
moira/varga.pyβ if D9 is already implemented there, this phase may already be done - If not: implement
navamsha_sign(longitude) -> strusing thefrom_element_cardinalrule - Implement
navamsha_chart(chart) -> dict[str, str]mapping each planet to its navamsha sign - Expose as a named technique distinct from
abu_masharin any shared API surface
constitutional target: P3 COMPLETE after this phase (if not already handled by varga.py).
Phase 4 β Hellenistic Nonomoiria (deferred)
Scope: 9-fold sign subdivision using the from_sign rule (Paulus
Alexandrinus, Firmicus Maternus).
Prerequisite: Phase 3 complete (shares module structure).
Note: Lower priority than Phases 1β3. The Hellenistic nonomoiria is not listed in AstroApp's Medieval Time Lords section; it is a delineation refinement tool, not a time-lord technique.
Longevity.py Intersection
Al-Sijzi's Part-based Hyleg refinement (Phase 2) intersects with
moira/longevity.py.
Policy: do not modify longevity.py during Phase 1. Design the
intersection interface in Phase 2 before touching either module. The interface
should be additive β Nine Parts provides a lot_management() function;
longevity.py calls it as an optional input, not a required dependency.
Open Questions
- Does
moira/varga.pyalready implement D9 Navamsha? If yes, Phase 3 is a verification task, not an implementation task. - Should "Love" be added as a distinct
PartDefinitionentry (Abu Ma'shar alias for Eros Valens) or mapped only in the query function output? - Should the
"abu_mashar"source tag be added to existing entries or handled via an explicit Nine Parts alias list in the query function?
Research Sources
- Benjamin N. Dykes, Introductions to Traditional Astrology (Cazimi Press, 2010) β confirmed arc formulas and full-reversal rule
- Benjamin N. Dykes, Persian Nativities Vol. II (Cazimi Press, 2010) β Abu Ma'shar's lot system
- Benjamin N. Dykes, The Book of Nine Judges (Cazimi Press, 2011) β Al-Sijzi's Transfer of Management mechanics
moira/lots.pyβ existing infrastructure; ~430 entries; pre-computation of Fortune and Spirit confirmed at line 2029