Packages1 MIN READ102 / 116

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

harmonics module

Implements harmonics@1/harmonic-n, the harmonic chart. transformHarmonic(snapshot, factor, rules) multiplies body, ASC (Ascendant) and MC (Midheaven) longitudes by an elected integer factor, wraps once, and labels every output point derived. Speeds are multiplied by the same factor; unknown speeds remain null. Natal cusps are never inherited.

validateHarmonicRules requires { transform: 'multiply', angles: 'transformed', houses: 'none', minFactor: 2, maxFactor: 64, allowedFactors: null }; narrower ranges or a unique allowed-factor subset may be supplied. Factor 1/fractional factors fail admission; factors outside the elected set exceed limits. Other angle/house conventions are rejected.

evaluateHarmonicContacts(chart, geometry, rules) evaluates optional same-chart contacts under returned derived speeds. Pure transformations with no source angles report a gap; missing geometry affects contacts only. Repeated transformations are deterministic and preserve the source.

createHarmonicFeature(admitted) supports engine.chart with requests: { harmonics: { factor: 4 } }, or engine.operation with a supplied snapshot. The feature declares position/house acquisition and optional geometry. Provenance retains the source, factor, transformed origins and factor gaps. House-placement requests remain unsupported.

Convention · implementation · worked fixtures.