primary_directions_roadmap - TheDaniel166/moira GitHub Wiki
Primary Directions Roadmap
Purpose
This document defines the refactor and expansion roadmap for Moira's primary directions subsystem.
The governing idea is simple:
- primary directions are a single mathematical family
- the currently implemented Placidus-mundane engine is only one narrow member of that family
- expansion should happen by constitutionalizing the subsystem first, then admitting new doctrinal variants through explicit truth domains
This is therefore a refactor-first roadmap, not an additive feature checklist.
This roadmap assumes the companion constitutional doctrine packet exists:
- primary_directions_doctrine.md
- primary_directions_direction_space_doctrine.md
- primary_directions_time_key_doctrine.md
- primary_directions_ambiguity_ledger.md
- primary_directions_phase10_audit.md
- primary_directions_constitutional_alignment.md
- primary_directions_invariant_register.md
- primary_directions_validation_codex.md
Current Moira State
Current implementation file:
moira/primary_directions.pymoira/primary_direction_geometry.py
Current admitted capability:
8runtime-admitted direction methods:Placidus mundanePtolemy / semi-arcPlacidian classic / semi-arcMeridianMorinusRegiomontanusCampanusTopocentric
2direction spaces:In MundoIn Zodiaco
2motion modes:DirectTraditional converse
4time keys:Ptolemy,Naibod,Cardan,Solar- explicit latitude doctrines:
mundane_preservedzodiacal_suppressedzodiacal_promissor_retainedzodiacal_significator_conditioned
- explicit latitude sources:
promissor_nativeassigned_zeroaspect_inheritedsignificator_native
- explicit perfection kinds:
mundane_position_perfectionzodiacal_longitude_perfectionzodiacal_projected_perfection
- explicit target surface:
- planets
- nodes
- angles
- house cusps
- explicit zodiacal aspect-point promissors
- sovereign catalog-backed fixed-star promissors on the current fixture-backed angle-and-planet branch
Current constitutional status:
- top-level primary-directions branch:
- constitutionally closed through
P12on the current admitted recoverable surface - governing freeze packet:
- constitutionally closed through
- major internal doctrine owners:
- methods: through
P10 - keys: through
P10 - spaces: through
P10 - converse: through
P10 - relations: through
P10 - presets: through
P10 - targets: through
P10 - perfections: through
P10 - latitudes: through
P10 - latitude sources: through
P10
- methods: through
Interpretation:
- the subsystem's baseline admitted surface is now frozen
- further work should be frontier research or explicit constitutional revision, not unfinished baseline closure
Current narrow branch notes:
Ptolemy / semi-arcis admitted as an explicit narrow semi-arc branch- on the currently admitted runtime surface it uses explicit historical
sub-laws:
MC/ICbyRAASC/DSCbyOA/OD- non-angular points by proportional semi-arcs
- on the currently admitted runtime surface it uses explicit historical
sub-laws:
Meridianis admitted as an explicit narrow equatorial branch- on the currently admitted runtime surface it perfects by equatorial right-ascension difference
Morinusis admitted as an explicit narrow equatorial branch- on the currently admitted runtime surface it perfects by equatorial right-ascension difference
- an explicit Morinian aspect-plane branch is now admitted when the service
layer supplies the required path context (
delta_max, motion sense, handed aspect) - the current doctrinal resolution is explicit:
- aspectual Morinus distinctness is real
- conjunction-style Morinus remains shared with the equatorial branch unless a source-safe distinct formula is recovered
Campanusis admitted as an explicit narrow under-the-pole branch- on the currently admitted runtime surface it uses the verified shared Campanus-Regiomontanus speculum law
- sharper Campanian divergence is still expected to emerge in wider mundane branches such as cusps, midpoints, and certain mundane aspects
Topocentricis admitted as an explicit narrow under-the-pole branch- it uses its own pole law:
tan(pole) = (MD / SA) * tan(latitude)
- it uses its own pole law:
Mathematical sovereignty status:
- sovereign runtime laws:
Placidus mundanePtolemy / semi-arcPlacidian classic / semi-arcMeridianRegiomontanusCampanusTopocentric
- shared narrow laws, not yet fully sovereign:
Morinus
Constitutional rule:
- a method is not treated as fully Phase-1-complete until it stands on its own explicit governing math
Research Summary
The external references below were checked on 2026-03-29.
Current external references show that mature primary-direction software treats the domain as a combination of several independent axes, not as one monolithic "method" toggle.
AstroApp
AstroApp currently advertises:
11primary-direction methods25time conversion keysIn Mundo,In Zodiaco, andField Planetraditional converseandneo-converse
Sources:
https://astroapp.com/en/astrology-software-all/astroapp-overviewhttps://astroapp.com/help/1/returnsW_53.htmlhttps://astroapp.com/images/astroapp_booklet_final.pdf
Methods explicitly advertised in their help/booklet material include:
PlacidusCampanus (under the pole)Regiomontanus (under the pole)MeridianMorinusPorphyryAlcabitiusEqual Houses (ecliptic)Equal Houses (hour circle)Edmund JonesAlong Ecliptic
Mastro
Mastro documents a smaller but still broader core than Moira currently has:
Ptolemy (semi-arc)Placidus (under the pole)RegiomontanusIn MundoIn ZodiacoDirectConverse- keys such as
Ptolemy,Naibod,Cardan
Source:
https://mastroapp.com/files/documentation_en.pdf
Astrodienst / AstroWiki
AstroWiki confirms the major doctrinal axes:
- domification / geometry method
- promissors and significators
- zodiacal vs mundane directions
- circle of aspects / aspect layout model
- static vs dynamic keys
- motion doctrine
Source:
https://www.astro.com/astrowiki/en/Primary_Directions
Halloran / Kolev Ecosystem
Halloran's software summaries and Kolev-related materials confirm that the wider primary-directions tradition is commonly broken out by:
- Placidian classic / semi-arc
- under-the-pole variants
- Regiomontanus
- Campanus
- Topocentric
- zodiacal and mundane modes
- multiple key families
Sources:
https://www.halloran.com/placidus.htmhttps://www.halloran.com/allsoft.htm
Core Insight
Primary directions are best modeled not as a list of unrelated methods, but as a family generated by a handful of mathematical and doctrinal axes.
That means expansion should not start with "add method #2".
It should start by making the truth domain explicit.
For this subsystem, accepted label does not override explicit doctrine.
So the roadmap is not "match every familiar menu label as quickly as possible." It is:
- decompose the doctrine first
- admit only the explicit branch that can be defined and validated
- refuse to guess at missing mathematical law
Truth Domain Axes
The subsystem should eventually formalize these axes explicitly.
1. Geometry Method
How the direction is geometrically constructed.
Examples:
Placidus mundanePlacidian classic / semi-arcRegiomontanusCampanusTopocentricMorinusPorphyryAlcabitiusEqual eclipticEqual hour-circleAlong ecliptic
2. Direction Space
In which reference space the direction is performed.
Examples:
In MundoIn ZodiacoField Plane
3. Motion Doctrine
How the direction proceeds in temporal or motional logic.
Examples:
DirectTraditional converseNeo-converse
4. Time Key Family
How arc is converted into time.
Families:
StaticDynamicSymbolic
Examples:
PtolemyNaibodCardanPlacidusKeplerAscendant ArcVertical ArcSymbolic DegreeSymbolic YearSymbolic Month
5. Target Doctrine
What may serve as promissors and significators.
Examples:
- planets
- nodes
- angles
- house cusps
- aspects
- fixed stars
- parallels / rapt parallels
- antiscia / reflections
6. Latitude / Projection Doctrine
How latitude and projection are handled.
Examples:
- true latitude respected
- latitude suppressed
- under-the-pole handling
- apparent vs true position choices
- lunar parallax handling
Refactor Thesis
The subsystem should be rebuilt so that current Placidus-mundane behavior becomes one specific doctrinal configuration inside a wider formal engine.
This means:
- not replacing the current engine
- not discarding validated arithmetic
- but lifting the current implementation into a typed doctrine framework
The correct mental model is:
- one
primary_directionssubsystem - many admitted doctrinal variants inside it
Not:
- many separate mini-engines for each method
Proposed Subsystem Architecture
Phase A. Constitutional Refactor
Complete constitutional process for the current subsystem before expanding breadth.
Immediate goals:
- finish
P3inspectability - build
P4doctrine/policy surface - build
P5-P6explicit relation layers - build
P7-P9local, aggregate, and network intelligence - build
P10-P12hardening, backend standard, and API curation
Phase B. Key Engine Extraction
Extract time-key conversion into its own formal doctrine layer.
Why first:
- keys are orthogonal to geometry method
- current
PrimaryArc.years()string switch is too narrow - many later expansions depend on a proper key surface
Target outputs:
PrimaryDirectionKeyFamilyPrimaryDirectionKeyPrimaryDirectionKeyPolicyPrimaryDirectionKeyTruthconvert_arc_to_time(...)
Phase C. Direction Space Formalization
Separate:
In MundoIn ZodiacoField Plane
Current Moira should become:
method = placidus_mundanespace = in_mundo
Phase D. Geometry Method Expansion
Add new methods one at a time under the refactored doctrine framework.
Recommended order:
Placidian classic / semi-arcRegiomontanusIn Zodiacosupport on the existing frameworkCampanusTopocentric- broader equal/ecliptic variants
This order is recommended because:
- it stays closest to the currently validated Moira math
- it covers the most historically central doctrinal branches first
- it yields broad capability gains without requiring all 11 methods immediately
Phase E. Converse Doctrine
Current converse handling is mathematically simple but under-formalized.
Formalize:
DirectTraditional converseNeo-converse
This should be an explicit doctrine axis, not a boolean flag.
Phase F. Promissor / Significator Expansion
After method and space formalization:
- add aspects
- add house cusps explicitly
- add parallels / rapt parallels
- add fixed stars
- add other doctrinally supported point classes
Build Order
This is the recommended build order for actual implementation work.
Sequencing Rule
Before the top-level primary-directions suite enters final P11 and P12
freeze, the major internal doctrine-owning subsystems should each reach P10.
Current internal subsystem sequence:
- core primary-directions engine
- primary-direction keys
- primary-direction spaces
- primary-direction converse doctrine
- target-doctrine / promissor-significator admission layer
This means:
- working doctrine notes may exist early
- subsystem-local implementation and hardening may proceed independently
- the final top-level backend standard and final top-level public API curation should wait until those major internal owners are constitutionally stable
Stage 1. Finish constitutional process for Current Engine
P3InspectabilityP4Policy surfaceP5Relational formalizationP6Relational hardeningP7Local conditionP8Aggregate intelligenceP9Network intelligenceP10Full hardeningP11Backend standardP12Public API curation
Stage 2. Extract the Key Subsystem
- formal key-family model
- key conversion truth / classification / policy
- validation for each admitted key
Stage 3. Extract the Direction-Space Subsystem
- formal direction-space truth / classification / policy layer
- keep current admitted implementation narrow:
in_mundo - defer
in_zodiacoandfield_planeadmission until space doctrine reaches hardening maturity
Stage 4. Add the Second Method
Placidian classic / semi-arc
Why this first:
- closest kin to current implementation
- historically central
- validates the geometry-method abstraction without immediately jumping families
Status:
- complete on a narrow admitted surface
Stage 5. Add the Second Space
In Zodiaco
Why here:
- direction space is a more fundamental axis than the long method list
- adding only more
in mundomethods leaves a major doctrinal gap unresolved
Status:
- complete on an explicit narrow admitted family:
assigned_zeropromissor_nativeaspect_inheritedzodiacal_longitude_perfectionzodiacal_projected_perfection
Stage 6. Add Regiomontanus
Regiomontanus
This is the next major historical branch and a meaningful divergence from the Placidian family.
Status:
- admitted on a narrow explicit surface
Stage 7. Add Converse Doctrine Proper
Traditional converseNeo-converse
Status:
Traditional converseadmittedNeo-conversenot yet implemented
Stage 8. Widen the Method Catalog
CampanusTopocentricPorphyryAlcabitiusMorinusEqual Houses (ecliptic)Equal Houses (hour-circle)Along EclipticEdmund Jones
Stage 9. Promissor / Significator Expansion
- aspects
- parallels / rapt parallels
- fixed stars
- additional sensitive points
Status:
- explicit zodiacal aspect-point promissors admitted
- house cusps, fixed stars, parallels / rapt parallels, and wider reflected target families remain to be implemented
Validation Strategy
This subsystem cannot be credibly expanded by code alone.
Each admitted doctrinal variant should have:
- unit invariants
- analytic edge-case tests
- historical worked-example fixtures where available
- software oracle comparison where appropriate
Recommended external comparison sources:
- AstroApp
- Mastro
- Kolev / Halloran Placidian and Regiomontanian examples
- published worked examples from Gansten / Houlding / Rusborn where reproducible
Validation principle:
- external software is an audit oracle, not a runtime dependency
Why This Should Be Treated as a Refactor
Because otherwise the subsystem will become a switchboard:
- one boolean for converse
- one string for key
- one branch for Regiomontanus
- another branch for zodiacal
- another branch for Campanus
That path produces:
- weak doctrine visibility
- unclear invariants
- validation drift
- fragile public semantics
The better path is:
- refactor the subsystem into explicit doctrinal axes
- then admit new variants as combinations of those axes
That is how Moira can exceed the current software landscape:
- clearer doctrine than black-box tools
- more inspectable truth than menu-driven software
- stronger validation story than "software X also says so"
Recommended Immediate Path Forward
Do not guess at field_plane or other composite labels.
Do this next:
- preserve and document the current explicit branches:
in_mundoin_zodiaco+assigned_zeroin_zodiaco+promissor_nativein_zodiaco+aspect_inheritedin_zodiaco+significator_native- named
PrimaryDirectionsPresetselectors for the documented live surfaces
- pause geometry-family widening unless a new formula-grade source appears
- mature orthogonal subsystems in this order:
- more time keys
- more target families
- more worked-example validation fixtures
- postpone any standalone
field_planeruntime space until its law is explicit
Current next practical candidates:
Cardanas the next explicit time key- fixed stars after target doctrine and validation plans are written tightly enough
- first narrow parallel branch now admitted only on the Ptolemaic zodiacal surface through explicit declination-equivalence targets
- direct Placidian mundane rapt parallels are now admitted as an explicit direct-only branch
- converse Placidian mundane rapt parallels are now also admitted as an explicit converse-only branch
- wider non-Placidian parallel families still require additional method-specific governing laws
- the governing branch policy for the wider parallel family now lives in:
- the governing branch policy for fixed stars now lives in:
- the governing target-family audit now lives in:
- the first reflected-family truth card now lives in:
- the remaining-frontier governance packet now lives in:
- the dedicated
neo-converseresearch packet now lives in: - the dedicated midpoint research packet now lives in:
Current branch-selection surface:
- callers may now select documented runtime branches through
PrimaryDirectionsPreset+primary_directions_policy_preset(...) - this keeps branch identity visible instead of rebuilding it ad hoc from low-level policy parts
Research Sources
- AstroApp overview:
https://astroapp.com/en/astrology-software-all/astroapp-overview - AstroApp primary directions help:
https://astroapp.com/help/1/returnsW_53.html - AstroApp booklet:
https://astroapp.com/images/astroapp_booklet_final.pdf - Mastro manual:
https://mastroapp.com/files/documentation_en.pdf - Astrodienst AstroWiki:
https://www.astro.com/astrowiki/en/Primary_Directions - Halloran / Kolev software summary:
https://www.halloran.com/placidus.htm - Halloran software index:
https://www.halloran.com/allsoft.htm