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.
- One named variant. A different convention is a different
version/variantand needs its own fixtures and review. No request field may switch a convention at call time. - Derived is not observed. Every transformed longitude carries
DerivedPointOriginwithmethod,versionand the admitted source identities. A derived point is never described as a provider position, andgeometryChartFromis never used to disguise one as observed. - Unknown derivatives stay null. A technique that supplies
speedLongitudemust define the derivative of its transformation (harmonics does; composite, directions and progression angles do not).nullreaches the shared geometry asphase: 'unknown'; zero is never substituted. - Geometry is evaluated, never re-derived. Aspect separation, orb and cusp placement come from
the injected
GeometryPort. No Western package repeatsresolveAspectsor house placement. - 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/westernand@astrology/chart-composeras types only. - 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. - Angles are optional inputs. A technique that needs the ascendant or midheaven degrades that
factor with
missing-anglesinstead of substituting the natal angle or recomputing one. - 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.