RELEASE_NOTES_6.1.0 - TheDaniel166/moira GitHub Wiki
Moira 6.1.0 - Contract and Release Integrity
Release date: 2026-07-28
Public upgrade path: 6.0.1 to 6.1.0
Moira 6.1.0 adds authoritative dated monthly profections and strengthens the engine's public-contract, aspect-pattern, Python-compatibility, and small-body release boundaries. It is a minor release because it adds typed capability while preserving admitted computations and valid 6.0.1 requests.
The 9,974-name asteroid identity expansion shipped in 6.0.1. Version 6.1.0 inherits that registry and adds the release-integrity and collision policies needed to consume it safely.
Highlights
- Twelve exact dated monthly-profection intervals between consecutive civil anniversaries.
- A chronology-aware Hellenistic chart profile with stricter cross-component truth and provenance invariants.
- Explicit aspect motion state, stable whole-sign seam behavior, deterministic pattern edges, and repaired Grand Sextile detection.
- Immutable asteroid and comet release receipts with complete checksum, provenance, and loader-admission policy.
- Fail-closed cross-family small-body identity resolution.
- A Python 3.10-compatible optional server surface and preserved acceptance of
the deprecated Decennial
deep_subdivision_method: nullrequest field.
Dated Monthly Profections
profection_chronology(...) constructs twelve contiguous, half-open intervals
between exact consecutive civil anniversaries. The admitted interval policy is:
equal_twelfths_of_civil_anniversary_year
Each result records:
- civil timezone and available timezone-data provenance;
- interval, leap-day, and repeated-time policies;
- exact query, annual-start, and annual-end UTC instants;
- matching Julian Day values;
- twelve ordered interval boundaries;
- the active month index; and
- each month's profected longitude, sign, and domicile lord.
The chronology is identified as a computational_projection. It is not
presented as Valens IV.28's separate day-Sun/night-Moon distance method, twelve
fixed 30-day periods, a 365.25-day quotient, or twelve civil-calendar months.
Civil-time failure semantics
Civil anniversaries preserve the natal local wall clock:
- a February 29 nativity requires the explicit
february_28ormarch_1policy; - a wall time inside a daylight-saving gap fails closed;
- a repeated wall time requires
earlier_occurrenceorlater_occurrence; - Moira never silently moves a nonexistent local time or guesses a fold; and
- the exact natal instant remains the age-zero anchor.
Named IANA lookup uses Python's standard-library zoneinfo interface. Moira
does not download timezone data or claim a database version the host does not
expose.
Unified Hellenistic Profile
HellenisticChartProfile advances to the chronology-aware v2 method and
rejects cross-component contradictions involving:
- datetime and Julian Day identity;
- Whole Sign house composition;
- angles, sect, and the ordered classical seven;
- aspect identity and overcoming policy;
- foundational-lot evaluated and unresolved partitions;
- profection chronology and activation;
- Decennial sect and L1/L2 assembly;
- Zodiacal Releasing policy and Fortune angularity; and
- method, source, inclusion, exclusion, and provenance receipts.
The profile remains non-interpretive and score-free.
Closed Hellenistic exclusions
The following are settled exclusions, not unfinished 6.1 work:
- Hermetic fixed-star attribution and product geometry;
- the removed
decan_hours()experiment; - Decennial L3/L4 and named Valens/Hephaistio deep methods;
- Triacontaeteris;
- Valens distribution interpretation; and
- synthetic Hellenistic condition scores.
The source-reconstructed Gundel/Harley names and planetary faces remain research data. They are absent from curated root, classical, facade, REST, and OpenAPI product surfaces.
Aspect and Pattern Contracts
Aspect and pattern calculation now preserves stable observable semantics at the public boundary:
- longitudes normalize consistently at the
0/360seam, including IEEE-754-scale whole-sign boundary cases; AspectData.motion_stateexplicitly distinguishes applying, exact, separating, stationary, and indeterminate results;- stationary truth is body-relative rather than inferred from one absolute speed threshold;
- duplicate aspect edges resolve deterministically;
AspectGraphNode.aspect_countsexposes an immutable compatibility-safe view while legacyfamily_countsremains available; and- Grand Sextile detection requires and reports the complete closed geometry.
These changes repair edge behavior without removing existing aspect names or legacy facade entry points.
Small-Body Release and Identity Integrity
Immutable catalog releases
Asteroid and comet distributions now have the same release-grade identity model:
- immutable catalog ID and version;
- exact manifest SHA-256;
- per-file byte length and SHA-256;
SHA256SUMS;- archive checksum;
- provenance notice and source revision; and
- a loader gate that rejects incomplete, mismatched, or zero-byte shards.
Generated identity files are byte-stable across Windows and POSIX checkouts, and website publication consumes only tracked Git sources. The metadata-only manifests retained in the wheel are now byte-identical to the immutable manifests named by those identity receipts. They remain metadata until at least one referenced BSP shard is installed; automatic discovery does not mistake a manifest-only wheel for a position-capable catalog.
The authoritative asteroid release remains:
| Field | Receipt |
|---|---|
| Catalog | moira-asteroids |
| Version | 2026.07.27.1 |
| Bodies | 9,974 |
| Shards | 399 |
| Sampling | 10-day step, 7-node window |
| Manifest SHA-256 | 0560302f877a46cebc550376ae70665fefab84801078181cf3c4199ce86d49d0 |
The authoritative comet release is:
| Field | Receipt |
|---|---|
| Catalog | moira-comets |
| Version | 2026.07.28.1 |
| Bodies | 497 |
| Shards | 20 |
| Sampling | 30-day step, 5-node window |
| Manifest SHA-256 | 31fbbedbb3ea7ba276fa9d49d52211ae41d90f76c74fb49ec0a6bafb014f07a1 |
Cross-family name collisions
Asteroid and comet catalogs currently share the normalized names Halley and
Encke. Unified position, chart, progression, void-of-course, and
astrocartography paths no longer guess which family the caller intended.
asteroid:Halleyselects asteroid Halley.comet:Halleyand1P/Halleyselect the comet.asteroid:Enckeselects asteroid Encke.comet:Enckeand2P/Enckeselect the comet.- An unqualified colliding name fails with typed ambiguity evidence.
Dedicated asteroid or comet routes remain family-scoped and retain their existing convenient aliases.
Python and REST Compatibility
Moira continues to support Python 3.10 through 3.14. Every optional-server enum
uses Moira's StrEnum compatibility boundary, and the release workflow imports
and constructs the server on the minimum supported Python.
The Decennial request boundary remains L1/L2 only:
levelsaccepts 1 or 2;- omission of
deep_subdivision_methodis valid; - explicit
deep_subdivision_method: nullremains valid for 6.0/6.0.1 client compatibility; - every named deep method remains invalid; and
- response compatibility receipts remain present and fixed to
null.
Progression entry points now validate policy types and values, aware target
datetimes, supported bodies, and house-frame inputs before resolving an
implicit planetary reader. Malformed requests therefore return the same
declared TypeError or ValueError on kernel-free and kernel-installed hosts.
Valid computations still require the appropriate installed ephemeris.
Validation Boundary
The release gate covers:
- Hellenistic source goldens, generated inventories, profile invariants, REST, serializer, and OpenAPI parity;
- civil-anniversary continuity, UTC/JD agreement, leap-day, gap, repeat, and active-boundary behavior;
- aspect seam, motion-state, deterministic pattern, and Grand Sextile cases;
- asteroid/comet identity, release receipt, loader, and collision policies;
- kernel-free progression validation ordering and explicit-reader unit mocks;
- Python 3.10 optional-server import and OpenAPI construction;
- public API, documentation, and generated-publication drift; and
- source, wheel, and installed-artifact release identity.
No new broad numerical ephemeris-parity claim is made for the separately distributed small-body kernels.
Installation
moira-astro==6.1.0
For the optional server:
moira-astro[server]==6.1.0
Read COMPATIBILITY_NOTES_6.1.0.md before regenerating typed clients or
upgrading an application that caches computed chart responses.