2.5 KiB
Ephemeris Candidate Adapter Spike - 2026-06-23
Purpose: decide whether a non-default candidate_backend is ready to enter the EphemerisAdapterContract parity gate.
Run:
python3 scripts/ephemeris_candidate_adapter_spike.py
swisseph_wasm_candidate
swisseph_wasm_candidate has local browser assets and package dependencies, so it is a plausible offline/PWA candidate. It is not a separate accuracy authority and it is not ready for runtime_setting_exposure.
The license_gate is the important blocker: Swiss Ephemeris WASM still follows Swiss Ephemeris licensing boundaries, so distribution claims must be reviewed before this becomes a user-selectable backend.
The local package metadata currently reports:
| Package | package_license |
|---|---|
@swisseph/browser |
AGPL-3.0 |
swisseph-wasm |
GPL-3.0-or-later |
That means the WASM path is useful for local/PWA fallback experiments, but it must not be treated as a low-risk proprietary desktop dependency without a license decision.
xalen_ephemeris_candidate
xalen_ephemeris_candidate remains the best permissive-direction spike because vedika-io/xalen-ephemeris is tracked as Apache-2.0. There is no local executable mirror in this workspace yet, so the current spike status is documentation-only.
vedastro_service_adapter_candidate
vedastro_service_adapter_candidate is now recognized as a formal candidate backend shape, but only through a reviewed external service boundary.
It is still blocked for direct runtime_setting_exposure because the workspace does not yet contain:
- a real adapter executor,
- timeout / retry policy,
- normalized parity rows that satisfy
EphemerisAdapterContract, - response provenance fields that make external-service usage auditable.
This keeps VedAstro in the engineering path without pretending that its C# stack is a drop-in local Python replacement.
Gate
All candidates are blocked until parity_gate_required is satisfied:
- Produce rows matching
EphemerisAdapterContract. - Compare against
swisseph_pythonbaseline rows. - Pass
longitude_delta_arcsecthresholds for Sun, Moon, Ascendant, Rahu, and Ketu. - Preserve
ayanamsa_value,retrograde, backend metadata, node policy, and house policy. - Keep
runtime_setting_exposureblocked until the above is verified.
Decision: do not expose any non-SwissEph runtime setting yet. The next implementation step is an isolated executable adapter only after local assets and license review are complete.