Astrology5 MIN READ50 / 116

Western technique conventions (W-05)

Status: Implemented v1 conventions · Task: W-05 · Updated: 2026-10-25 · Methods are available when their rule resources are admitted and features registered.

W-06–W-10 each implement one named convention. This directory fixes exactly one variant per technique, names the variants that stay unsupported, and lists the Composer facts each variant consumes. A specification is not a capability: capabilities() keeps reporting a technique as unsupported until its implementation task lands, its fixtures pass and the host registers the feature (W-11).

Technique Specification Admitted identity Implements in Required gates
Composite composite.md composite 1 midpoint W-06 positions; geometry optional
Progressions progressions.md progressions 1 secondary-day-for-year W-07 positions; geometry optional
Returns returns.md returns 1 solar W-08 positions, probes; houses for the event chart
Directions directions.md directions 1 solar-arc-naibod W-09 positions, houses; cross-chart-geometry optional
Harmonics harmonics.md harmonics 1 harmonic-n W-10 positions, houses; geometry optional

Admitted identity is the TechniqueIdentity the feature must carry. The same triple is the rulebook manifest entry (technique, version, variant); the payload hash binds the tables that variant reads. A rulebook manifest admits at most one entry per technique, so a second variant of a technique is a second bundle, never a request flag.

Shared rules

These hold in every specification below and are not repeated per technique.

  1. One named variant. A different convention is a different version/variant and needs its own fixtures and review. No request field may switch a convention at call time.
  2. Derived is not observed. Every transformed longitude carries DerivedPointOrigin with method, version and the admitted source identities. A derived point is never described as a provider position, and geometryChartFrom is never used to disguise one as observed.
  3. Unknown derivatives stay null. A technique that supplies speedLongitude must define the derivative of its transformation (harmonics does; composite, directions and progression angles do not). null reaches the shared geometry as phase: 'unknown'; zero is never substituted.
  4. Geometry is evaluated, never re-derived. Aspect separation, orb and cusp placement come from the injected GeometryPort. No Western package repeats resolveAspects or house placement.
  5. No cross-technique imports. A technique may read another technique’s result through WesternFeatureContext.dependencies; it never imports the package. Shared shapes come from @astrology/western and @astrology/chart-composer as types only.
  6. Half-open instants, closed tolerances. Windows are [start, end] for solved events and [start, end) for occupancy; every stated tolerance is inclusive on the side that matters and is carried in the result, not left implicit.
  7. Angles are optional inputs. A technique that needs the ascendant or midheaven degrades that factor with missing-angles instead of substituting the natal angle or recomputing one.
  8. Fixtures are synthetic and exact. Every example below is defined by an explicit formula over UTC (civil clock time) epoch milliseconds, so it runs without a provider, ephemeris file or network. A real-chart fixture is added only when a reviewer records its source and tolerance.

Cross-cutting prerequisites

Id Prerequisite Blocks Owner
P0 Resolved: declared requirements.composer exposes Composer only to mapped/event-chart features W-07, W-08 W-11
P1 Resolved: WesternEngine.operation routes supplied pairs and search operations; compose acquires profile-pinned inputs W-06, W-08, W-03/W-04 W-11
P2 Resolved: pure probeRequest preflight declares context/budget; the coordinator opens one bounded C-04 session W-03, W-08 W-11/C-04
P3 Composite cusp midpoints need both snapshots to carry cusps from the same house system W-06 house ring C-02/C-07

P0–P2 are covered by the coordinator integration fixtures. P3 is enforced per supplied composite pair. Derived geometry never fabricates an astronomical snapshot.

Unsupported variants

The following are named here so they are rejected explicitly rather than aliased to a supported variant. Each needs its own specification, fixtures and version:

Technique Unsupported variant Why
Composite time-place (Davison) Needs an averaged instant, a great-circle midpoint location and Composer astronomy at that point; midpoint longitudes are not an approximation of it
Composite ascendant-only / house-ring-recomputed Needs a house-system-specific construction that no Composer operation exposes
Progressions calendar-day-for-year, julian-year, solar-arc-progressed-angles Different mapping or angle conventions; each changes every result
Progressions tertiary, minor, converse Different time units or direction; not a parameter of the secondary method
Returns lunar, planetary (other bodies), precessed Different target body or sidereal correction; a new bundle
Returns exact-longitude-override A caller-chosen target longitude is not a return to the reference position
Directions primary Needs right ascension, declination, latitude and a named key; a separate coordinate scope
Directions solar-arc-true (progressed-Sun arc) Depends on the progression mapping; must be specified and fixtured with it
Harmonics non-integer factors, n > 64, n = 1 Undefined transformation, unbounded output or identity transform
Harmonics inherited or transformed houses No reviewed house treatment exists; transformed points must not borrow natal cusps

Review gate

Each supplied production rulebook should record a named source per convention in its manifest sources entry. Implementations and synthetic fixtures verify these specified numerical conventions; they do not replace independent real-chart validation or supply a reviewed production rulebook. The numerical conventions fixed here (year length, Naibod rate, tolerances, bounds) are part of the technique version: changing one is a new version, not an edit to this document.