Repository navigation
REST_REDUCTION_VISIBILITY_IMPLEMENTATION_PLAN
Status: active implementation plan
This document defines the implementation sequence for bringing the Moira REST surface into full alignment with the reduction-visibility contract.
It is not the contract itself. It is not the audit ledger.
Those roles remain owned by:
This plan governs rollout order, transport shape decisions, verification obligations, and deferral discipline.
The REST API must not collapse facade-visible computational truth into an opaque final-only transport when the engine already exposes meaningful reduction, policy, fallback, classification, or branch truth.
The implementation goal is therefore:
- preserve compact consumer-facing routes where useful
- add lawful reduction access without breaking existing callers
- keep transport truth summary-grade rather than exposing unstable internal implementation details
- expand route families in a controlled order, starting with foundational surfaces
As of 2026-06-04:
-
positionsis the first fully remediated pilot family- compact routes remain:
/v1/positions/planet/v1/positions/sky
- sibling reduction routes now exist:
/v1/positions/planet/reduction/v1/positions/sky/reduction
- compact routes remain:
-
chartnow has a sibling reduction route:/v1/chart/reduction
-
transitsandrelationshipalready preserve substantial doctrinal truth -
primary-directionsnow has a sibling reduction route on the core arc-search surface:/v1/primary-directions/arcs/reduction
-
primary-directionssearch-derived routes now also include:/v1/primary-directions/profile/reduction/v1/primary-directions/network/reduction
-
progressionschart-producing routes now have sibling reduction routes:/v1/progressions/secondary/reduction/v1/progressions/secondary-declination/reduction/v1/progressions/arc/reduction/v1/progressions/time-key/reduction
-
progressionsfamily completion routes now also include:/v1/progressions/house-frame/reduction/v1/progressions/house-frame/arc/reduction/v1/progressions/profile/reduction/v1/progressions/network/reduction
- several other route families are structurally healthy but inconsistent in how directly they expose reduction truth
This baseline is tracked in the live audit:
The rollout proceeds in four waves.
Goal:
- make the foundational entry surfaces reduction-visible
Status:
- implemented as of 2026-06-04 on the current admitted surface
Families:
chart-
housesonly as needed for symmetry with chart-level reduction transport
Primary deliverables:
- add a lawful chart reduction surface
- expose normalized datetime and Julian-day reduction
- expose observer context when present
- expose chart assembly policy actually applied
- expose per-body reduction summaries without requiring callers to reconstruct them body-by-body from separate endpoints
Preferred transport shape:
- sibling reduction endpoint
/v1/chart/reduction
Why:
- it preserves the current compact
/v1/chartcontract - chart reduction is heavier than the positions reduction payload
- the chart route is foundational enough that a separate truth surface is easier to keep stable
Exit criteria:
- a chart reduction route exists
- compact
/v1/chartremains backward-compatible - chart reduction includes enough information to explain how each returned body reached transport form
Current state:
- satisfied by
/v1/chart/reduction -
housesremains compact, with later sibling expansion left optional rather than required for wave closure
Goal:
- resolve families whose current transport language explicitly understates engine truth
Status:
- implemented as of 2026-06-04 on the current search-derived route family
Families:
primary-directions
Primary deliverables:
- remove any transport posture that implies permanent omission of policy truth
- add a lawful path to fuller reduction or policy surfaces
- preserve current compact or opt-in ergonomics where possible
Preferred transport shape:
- likely sibling reduction routes or stronger expansion flags
- this family should not be widened casually on the main result routes
Exit criteria:
- no model or serializer language remains in open tension with the service contract
- a caller can inspect direction doctrine, policy, and branch truth without reading engine internals directly
Current state:
- satisfied on the search-derived route family through:
/v1/primary-directions/arcs/reduction/v1/primary-directions/profile/reduction/v1/primary-directions/network/reduction
-
speculumremains compact-first and may remain so unless a later service decision requires a sibling truth surface
Goal:
- normalize partially compliant families so that similar truth domains are exposed through similar transport conventions
Status:
- started as of 2026-06-04 on the progression chart-producing routes
Families:
progressionstimelordsreturnsvarshaphalvisibilityphenomena
Primary deliverables:
- route-by-route audit against the now-stabilized pattern
- add reduction flags or sibling reduction routes where real gaps remain
- align field naming for:
- computation truth
- classification
- relation
- condition profile
- observer context
- policy actually applied
Exit criteria:
- no major family remains merely "accidentally partial"
- comparable route families use comparable truth vocabulary
Current state:
-
progressionsis now functionally closed at the family level -
house-frame/cuspsremains intentionally compact -
timelords,returns,varshaphal,visibility, andphenomenaremain unswept in Wave 3 terms
Goal:
- ensure aggregate routes do not erase per-item reduction truth
Status:
- started as of 2026-06-04 on
batch/chartsandbatch/progressions
Families:
batch- any multi-result wrappers introduced later
Primary deliverables:
- preserve or embed per-result reduction where the wrapped family already has a lawful truth surface
- define when aggregate routes may intentionally omit reduction for payload economy and how the caller recovers it
Exit criteria:
- aggregation does not silently black-box already-compliant route families
Current state:
-
/v1/batch/charts/reductionnow preserves per-item chart reduction truth -
/v1/batch/progressions/reductionnow preserves per-item progression reduction truth - compact
batch/transitsand transit/ingress-stylebatch/eventsalready preserve embedded wrapped-family truth through their event payloads -
batch/returnsremains bounded by the weaker directreturnsfamily - heterogeneous
batch/eventsremain mixed because not every event subtype has the same admitted reduction depth - Wave 4 is therefore started but not closed
This plan freezes the following implementation preferences.
Do not widen every existing response with large optional reduction fields by default.
Reason:
- backward-compatibility
- payload economy
- easier client migration
Preferred examples:
/v1/chart/reduction/v1/positions/planet/reduction/v1/positions/sky/reduction
Use sibling reduction endpoints when:
- the reduction payload is large
- the family is foundational
- the same request body can be reused cleanly
Use include_* style expansions when:
- the payload increase is small
- the route already uses opt-in enrichment
- the truth being added is structurally subordinate to the main result
Likely candidates:
- parts of
primary-directions - selective
progressionsenrichments
Reduction transport should preserve:
- admitted stage sequence
- applied policy
- branch/fallback/classification truth
- normalized inputs
- observer context
Reduction transport should not promise:
- volatile helper-level internals
- debug-only intermediate vectors
- unstable substrate-private caches
The concrete next steps are:
- Audit whether
housesneeds a sibling reduction endpoint or only chart-level embedding. - Decide whether
primary-directions/speculumshould remain compact-only or gain a sibling reduction route. - Sweep
timelords. - Sweep
varshaphal,visibility, andphenomena. (returns direct family now complete with embedded reduction contract + controls.) - Update
batch/returnsnow that direct returns has a family-level reduction contract (embedded computation_truth). - Revisit heterogeneous
batch/eventsonly after the weaker event subtypes have stronger family-level truth surfaces.
Sequencing law:
- do not start broad family consistency work until
chartis closed - do not widen aggregate routes before the embedded families stabilize
Each implementation wave must satisfy both transport and behavioral checks.
For each remediated route family:
- server route tests must verify compact-route backward compatibility
- server route tests must verify reduction-route truth presence
- validation-envelope behavior must remain unchanged for malformed input
- response models must remain strict (
extra="forbid")
Reduction-route tests should verify, where relevant:
- normalized datetime and Julian-day truth
- observer context
- policy actually applied
- fallback or effective-system truth
- classification truth
- admitted stage sequence
- result/reduction agreement
If a family is judged too underdetermined for immediate remediation:
- record the reason in the audit
- do not mark the family compliant prematurely
- do not hide the gap behind "future expansion" language
This plan does not authorize:
- replacing the engine-facing facade with REST-first semantics
- exposing raw debug internals as if they were stable public doctrine
- refactoring unrelated route families for aesthetic uniformity
- breaking existing compact-route clients unless a separate compatibility decision is made explicitly
This roadmap is complete only when:
- every foundational family has a lawful reduction path
- every partially compliant family has been either remediated or explicitly deferred with a stated reason
- no service-layer document still frames transport opacity as an intended endpoint
- batch and aggregate routes preserve, rather than erase, already-admitted reduction truth
Until then, the audit remains the live state ledger and this plan remains the governing rollout sequence.