Packages2 MIN READ106 / 116

Internal module guide. This module is now part of @astrology/western; use the public package README for application setup.

progressions module

Implements progressions@1/secondary-day-for-year, the secondary progression that equates one day after birth with one year of life. mapProgressionContext({ reference, targetInstant }, rules) maps each elapsed tropical year (31,556,925,216 milliseconds) to one ephemeris day and rounds the final offset once to milliseconds. Calendar anniversaries are not tropical-year multiples. Backward targets are rejected; an equal target is allowed.

validateProgressionRules requires { method: 'secondary', timeUnit: 'day-for-tropical-year', yearLength: 'tropical-2000', angles: 'naibod-mc', direction: 'forward' }. calculateProgression(request, composer, rules, geometry?) acquires positions once at the mapped instant, retaining the reference’s coordinate conventions and observers. Observed body positions remain separate from the derived MC (Midheaven).

The progressed MC adds 0.9856473590852142 × mappedEphemerisDays to the natal MC. The ascendant has no v1 construction and always reports a missing-angle factor; absent natal MC also remains unavailable. No progressed houses or inherited natal cusps are supplied.

Optional progressed-to-fixed-natal contacts use Composer geometry. Body derivatives are converted from the ephemeris clock to the target clock; MC motion remains unknown. Missing geometry is explicit. The result retains target/reference/mapped instants, context, source hashes, observations, arc and derived MC origin.

createProgressionFeature(admitted) declares Composer access and positions, with optional geometry. Use engine.operation({ profile, technique: 'progressions', request: { reference, targetInstant } }); no probe session is opened. The envelope is incomplete for the deliberately unavailable progressed ascendant.

Convention · implementation · worked fixtures.