dispositorship_doctrine - TheDaniel166/moira GitHub Wiki
Dispositorship Doctrine
Purpose
This document defines the pre-constitutional doctrine layer for Moira's dispositorship subsystem.
It exists because dispositorship is one of those techniques that appears superficially simple while hiding consequential doctrinal choices inside what many software packages treat as defaults.
Before Moira implements this technique, it must state clearly:
- what a dispositor is in the narrow computational sense
- what a dispositorship chain is and how it is traversed
- what qualifies as a final dispositor
- how cycles differ from final dispositors
- what subject set and rulership doctrine Phase 1 will admit
- how unsupported bodies are handled
This document is therefore pre-Phase-1 constitutional work. It is not an API contract and not yet a backend standard.
Foundational Thesis
Dispositorship in Moira is a derived rulership relation.
Its core logic is:
- determine the sign occupied by a subject body
- determine the ruler of that sign under an explicit rulership doctrine
- that ruler is the body's dispositor
- repeat the process over successive dispositors to produce a directed chain
- classify the chain's termination as a final dispositor, a terminal cycle, or an unresolved termination
The technique is simple only if all of its underlying doctrine is already fixed. It is not simple when the following remain ambient:
- which bodies are allowed to participate
- which rulership system is active
- what counts as a legitimate terminal condition
- how unsupported subjects are treated
Moira must not allow those choices to enter the engine as unstated defaults.
Computational Definition
What a Dispositor Is
A dispositor is the planet that rules the sign occupied by another subject, under the active rulership policy.
For example:
- Venus in Aries is disposed by Mars under traditional domicile rulership
- Saturn in Aquarius is disposed by Saturn under traditional domicile rulership
In the second case, the subject disposes itself because it occupies one of its own domiciles.
What a Dispositorship Chain Is
A dispositorship chain is the directed sequence produced by repeated dispositor lookup from an initial subject:
subject -> dispositor -> dispositor of dispositor -> ...
The chain is not interpretive language. It is a deterministic traversal over a rulership graph.
What a Final Dispositor Is
A final dispositor exists only when a dispositorship chain terminates in a subject that is in its own domicile under the active rulership policy.
This is a narrow definition.
A final dispositor is not merely any endpoint where traversal happened to stop. It is a terminal self-domiciled sovereignty condition.
What a Terminal Cycle Is
A terminal cycle exists when dispositorship traversal enters a closed loop that does not terminate in a self-domiciled endpoint.
Examples:
- two-node loop: mutual reception by domicile
- larger loop: three or more subjects disposing one another in a closed cycle
A terminal cycle is not a final dispositor. Both halt traversal, but they are not doctrinally equivalent.
What an Unresolved Termination Is
An unresolved termination exists when traversal cannot continue to a valid next subject under the active policy and no legitimate final dispositorship or terminal cycle classification has been reached.
Phase 1 should minimize unresolved terminations by constraining scope tightly, but the termination class must still exist as a formal outcome.
Why This Needs Explicit Policy
Dispositorship is not just a graph-walking convenience layer.
Changing any of the following changes the actual topology of the relation:
- the participating subject set
- the sign-rulership doctrine
- the handling of unsupported bodies
This means implementation choices that many systems treat as convenience flags are in fact doctrinal acts.
For example:
- admitting Uranus as a participant without changing rulership tables produces one graph
- admitting Uranus and also replacing Aquarius' ruler with Uranus produces a different graph
- admitting Uranus while silently mapping it through Saturn produces yet a third graph
These are not equivalent results under a shared mathematical surface.
Therefore Moira must separate:
- who may participate
- who rules what
- what counts as a valid termination
- how unsupported subjects are treated
- how results are ordered for deterministic presentation
Core Doctrinal Axes
1. Subject Set
This answers:
- which bodies are allowed to participate as graph subjects
Phase 1 Moira stance:
- the canonical subject set is
CLASSIC_7only
Rationale:
- dispositorship is historically and computationally stable under the traditional seven-planet rulership scheme
- including outer planets is not a harmless enlargement of inputs; it changes the graph only if paired with a compatible rulership doctrine
- later admission of outer planets must be a deliberate policy act, not an ambient extension
2. Rulership Doctrine
This answers:
- which subject rules each sign for dispositorship purposes
Phase 1 Moira stance:
- dispositorship uses traditional domicile rulership only
That means:
- Aries, Scorpio -> Mars
- Taurus, Libra -> Venus
- Gemini, Virgo -> Mercury
- Cancer -> Moon
- Leo -> Sun
- Sagittarius, Pisces -> Jupiter
- Capricorn, Aquarius -> Saturn
Phase 1 excludes:
- modern outer-planet sign rulerships
- exaltation dispositors
- triplicity dispositors
- term/bound dispositors
- face/decan dispositors
- house dispositors
Those may become later named policies, but they must not be smuggled into the baseline feature.
3. Chain Termination Semantics
This answers:
- what kinds of traversal outcomes are formally recognized
Phase 1 Moira stance:
final_dispositormeans termination in a self-domiciled endpointterminal_cyclemeans entry into a closed loop, including mutual receptionunresolvedmeans traversal could not continue to a policy-valid next step
These classes are disjoint.
Mutual reception is not a final dispositor. It is the two-node special case of terminal cycle.
4. Unsupported Subjects
This answers:
- what happens when the caller supplies bodies outside policy scope
Phase 1 Moira stance:
- unsupported subjects are ignored by default
Reason:
- rejection is too strict for the default mode when a mixed chart is supplied
- silent coercion or surrogate mapping is doctrinally dishonest
- ignoring out-of-scope subjects while exposing scope receipt is explicit, deterministic, and testable
Later policy may add:
rejectmode for strict validationsegregatemode for reporting unsupported subjects without computing them
Phase 1 should not silently map unsupported subjects through borrowed rulers.
5. Ordering
This answers:
- how dispositorship summaries are presented deterministically
Phase 1 Moira stance:
- returned summaries should use the engine's established dignity-consistent planetary ordering rather than introducing a special dispositorship-only ordering
Ordering is a presentation stability policy, not doctrinal meaning.
Phase 1 Scope Decision
Moira dispositorship Phase 1 should be deliberately narrow.
It should include:
- classical seven planets only
- sign derivation from existing longitude state
- traditional domicile ruler lookup
- deterministic dispositorship-chain traversal
- final-dispositor detection
- terminal-cycle detection
- explicit unresolved termination class
It should not include:
- interpretive scoring
- dignity weighting
- house rulership substitution
- outer-planet doctrine
- mixed rulership systems
- accidental condition synthesis
- chart-ruler or almuten claims
Phase 1 is about formalizing the relation cleanly, not exhausting every possible interpretive use.
Relationship To Existing Moira Subsystems
Dignities
Dispositorship is adjacent to dignities.py because both depend on explicit
rulership doctrine.
However, dispositorship is not identical to:
- essential dignity
- mutual reception scoring
- condition-network scoring
Reception and dispositorship are related but not interchangeable:
- reception concerns a relation between planets across dignity ownership and, in formal historical usage, often involves aspectual awareness
- dispositorship concerns directed sign-rulership dependency regardless of aspect
Moira should not collapse the two into one layer merely because they share rulership tables.
Nine Parts
nine_parts.py already uses the local concept of a part's lord: the ruler of
the sign in which a Part falls.
That is compatible with dispositorship doctrine, but it is a localized use of sign lordship inside one subsystem. It does not by itself constitute a general dispositorship engine.
Profections and Time Lords
profections.py and related timelord code already use sign-ruler logic for
annual lordship.
That logic is adjacent infrastructure, not dispositorship. A lord of a profected sign is not the same object as the dispositor chain of the natal planet occupying a sign.
Recommended Policy Decomposition
Moira should keep the policy surface decomposed rather than collapsing multiple meanings into one flag.
The conceptual policy families are:
subject_policydefines who may participate in the graphrulership_policydefines who rules whattermination_policydefines what counts as final, cyclic, or unresolvedunsupported_subject_policydefines ignore, reject, or segregate behaviorordering_policydefines deterministic presentation order only
This separation matters because:
- admitting outer planets should not automatically imply modern sign rulership
- cycle detection should not imply final dispositorship
- presentation ordering should not affect computational truth
Recommended Result Truth
Moira should preserve exact structural truth rather than forcing callers to infer meaning from prose summaries.
The result model should distinguish at least:
subject_in_scopesubject_has_dispositortermination_kindterminal_subjectscycle_members
Additional useful distinctions may include:
initial_subjectvisited_subjectschain_lengthis_self_disposedignored_subjects
This keeps the engine exact while allowing higher layers to phrase the result more naturally for users.
Term Registry
Moira should use the following meanings consistently:
| Term | Meaning |
|---|---|
| dispositor | ruler of the sign occupied by a subject under active policy |
| dispositorship chain | repeated directed lookup of dispositors from an initial subject |
| final dispositor | self-domiciled terminal endpoint under active rulership policy |
| terminal cycle | closed dispositorship loop that halts traversal without yielding a final dispositor |
| mutual reception | the two-node special case of terminal cycle under domicile rulership |
| unsupported subject | body supplied to the computation but excluded by subject policy |
| unresolved termination | traversal outcome with no policy-valid continuation and no recognized final or cyclic termination |
Phase 1 Ratified Working Stance
If Moira implements dispositorship in Phase 1, the governing doctrine should be stated as follows:
- Moira dispositorship Phase 1 operates on
CLASSIC_7only. - A final dispositor exists only when a chain terminates in a self-domiciled endpoint under the active rulership policy.
- Detected cycles, including mutual reception, are terminal cycles and are not final dispositors.
- Unsupported subjects are ignored by default in Phase 1 unless a stricter policy is explicitly requested.
- Returned summaries use the engine's established dignity ordering for deterministic consistency.
Deferred Questions
The following are intentionally deferred beyond Phase 1:
- whether outer planets may ever participate as subjects
- whether modern sign rulerships should be admitted at all
- whether exaltation, triplicity, term, or face dispositorship should exist as separate named doctrines
- whether house dispositors belong in the same subsystem or in a separate topical-rulership layer
- whether dispositorship should integrate with condition-network intelligence
- whether chart-wide summaries such as "dominant dispositing planet" are doctrinally justified or merely software conveniences
These are later policy and architecture questions, not Phase 1 prerequisites.
Final Recommendation
Moira should implement dispositorship only after freezing it as an explicit policy-bounded rulership relation.
The engine should prefer:
- narrow scope
- explicit rulership doctrine
- explicit termination classes
- visible unsupported-subject handling
- deterministic ordering
- structured result truth
It should avoid:
- ambient outer-planet admission
- silent ruler substitution
- treating cycles as final dispositors
- inferring computational truth from display strings
- interpretive inflation at the foundational layer
Dispositorship is suitable for Moira, but only if implemented as a governed relation layer rather than a casual convenience feature.