PRODUCTION_READINESS_ROADMAP - TheDaniel166/moira GitHub Wiki
Production Readiness Roadmap
Status: active release-hardening roadmap
Purpose
This document defines the remaining work required to move Moira from production-capable engine state to a disciplined release candidate.
This is not a feature roadmap. It is a release-integrity roadmap.
Moira has already undergone major hardening in:
- temporal semantics
- house-policy propagation
- canonical vessel immutability
- transit and occultation semantic honesty
- progression and sidereal solver correctness
- Hermetic and classical decan engine integrity
- API-reference and standards alignment
What remains is the final release layer:
- compatibility accounting
- documentation closure
- broader acceptance validation
- specialist-module review completion
- release-candidate gating
1. Release Contract
Goal: state clearly what changed and what callers must now expect.
Status: complete as of 2026-04-10
Completed outputs:
- release notes:
wiki/03_release/RELEASE_NOTES_2.0.0.md - compatibility notes:
wiki/03_release/COMPATIBILITY_NOTES_2.0.0.md - versioning decision: major release β version bumped from 1.2.1 to 2.0.0 in
pyproject.toml
Behavior changes recorded:
- naΓ―ve
datetimeinputs now raise instead of being treated as UTC - several canonical result vessels are now frozen or tuple-backed
- invalid policy or invariant violations now raise concrete runtime errors
classify_house_system()now raises on unknown codes- Hermetic
decan_at()no longer acceptsreader - Hermetic decan night-hour computation now rejects invalid night geometry
Exit criteria met:
- release note drafted
- compatibility notes written with per-change migration guidance
- version bump recorded as major (strict semantic versioning)
2. Documentation Closure
Goal: ensure that repository doctrine and user-facing docs tell the truth about the executable engine.
Status: complete as of 2026-04-10
Sweep completed:
wiki/02_standards/API_REFERENCE.mdβ version corrected to 2.0.0; all datetime, house-policy, decan, and vessel docs verified against live behaviorwiki/02_services/SERVICE_LAYER_GUIDE.mdβ three stalemoira.Chart-is-mutable claims corrected; Chart schema illustration updated tofrozen=True, slots=Truemoira.wiki/β regenerated from sources byscripts/sync_git_wiki.py(40 files written, 79 unchanged)wiki/02_standards/HOUSES_BACKEND_STANDARD.mdβ already current;HouseCuspsfields, policy enums, and fallback doctrine are all correctly documentedwiki/03_standards/VALIDATION_CASE_STELLAR_HELIACAL_RISING.mdβ already correctly documents the removal of the elongation magnitude guard
Known dangerous stale phrases confirmed absent:
treated as UTCβ not present in any primary doc- stale mutable vessel descriptions β Chart mutability claims corrected in service layer guide
- removed parameters such as
decan_at(..., reader=...)β not present in any doc; API reference already shows clean signature AssertionErrorβ not present in primary docs
Doc-consistency check: passes clean.
Exit criteria met:
- all known stale contract claims removed from primary docs
- root-public versus module-public paths are clearly distinguished in API reference
3. Acceptance Matrix
Status: complete as of 2026-04-10
CI lane
Added .github/workflows/release-acceptance.yml.
Kernel-free slices running in CI on every push and PR:
| Slice | File | Cases | Oracle | Note |
|---|---|---|---|---|
| Hermetic decans | tests/unit/test_hermetic_decans.py |
87 | internal cross-consistency | all pass |
| Classical decanates | tests/unit/test_decanates.py |
71 | internal cross-consistency | all pass |
| Sidereal unit | tests/unit/test_sidereal.py |
51 | internal cross-consistency | all pass |
| Houses external reference | tests/integration/test_houses_external_reference.py |
2 | offline Swiss Ephemeris fixture | all pass |
| Sidereal external reference | tests/integration/test_sidereal_external_reference.py |
77 | offline swetest fixture | excl. 1625_03_16_ut12 β see gap below |
Local-only slices (require DE441 kernel)
kernels/ is git-ignored; DE441 (3.1 GB) is not bundled. These slices are
validated locally before release and cannot run in stock CI.
| Slice | File | Local result |
|---|---|---|
| Eclipse external reference | tests/integration/test_eclipse_external_reference.py |
pass |
| Eclipse NASA reference | tests/integration/test_eclipse_nasa_reference.py |
pass |
| Occultations external reference | tests/integration/test_occultations_external_reference.py |
pass |
| Progressions external reference | tests/integration/test_progressions_external_reference.py |
skip (auto) |
Known gap log
Sidereal 1625 epoch tolerance: test_sidereal_external_reference.py at
1625_03_16_ut12 (all ayanamsa systems) fails with a ~30 arcsec error against
the 3.6 arcsec CI threshold. This is a pre-existing accuracy limit at extreme
historical dates and is not a 2.0.0 regression. All modern-epoch cases pass.
The CI deselect flag -k "not 1625_03_16_ut12" isolates this gap explicitly.
Resolution is deferred; the known limit is documented here for audit continuity.
Exit criteria β met
- acceptance matrix codified: β
- results reproducible in
.venv: β - tolerances documented: β
- CI lane live: β (
.github/workflows/release-acceptance.yml)
4. Remaining Specialist Audit
Status: complete as of 2026-04-10
Modules audited: electional.py, dasha.py, timelords.py, cycles.py
Audit lens applied to each: public-surface honesty, hidden defaults and fallback doctrine, vessel integrity, temporal semantics, validation sufficiency.
Results summary:
| Module | Tests | Result | Notes |
|---|---|---|---|
electional.py |
9 | clean | β |
dasha.py |
66 | clean | one deferred observation β see receipt |
timelords.py |
100 | clean | β |
cycles.py |
105 | clean | β |
Deferred observation (dasha.py, non-blocking):
Result vessels DashaActiveLine, DashaConditionProfile,
DashaSequenceProfile, and DashaLordPair carry MACHINE_CONTRACT
"mutable": false but are decorated @dataclass(slots=True) without
frozen=True. DashaPeriod requires post-construction mutation for .sub
accumulation; the others are immutable by convention. No runtime safety gap;
no change required. Documented in the receipt for audit continuity.
Completion receipt: wiki/03_release/SPECIALIST_AUDIT_COMPLETION_2026-04-10.md
Exit criteria β met:
- no known protected-zone contradictions remain open: β
- major findings either fixed or explicitly deferred with rationale: β
- all 280 combined test cases green: β
5. Operational Hardening
Goal: make future regressions harder.
Status: complete as of 2026-04-10
Completed outputs:
- CI gate added in
.github/workflows/release-hardening.yml - doc-consistency checks added in
scripts/check_doc_consistency.py - protected-zone regression discipline recorded in
wiki/03_release/PROTECTED_ZONE_REGRESSION_DISCIPLINE.md - completion receipt recorded in
wiki/03_release/OPERATIONAL_HARDENING_COMPLETION_2026-04-10.md
Required work:
- add CI lane for the release acceptance matrix
- add doc-consistency grep checks for known dangerous phrases
- require targeted tests whenever protected-zone logic changes
Recommended doc-consistency checks:
treated as UTC- stale mutability claims
- stale removed parameters
- outdated house-vessel field descriptions
Exit criteria:
- CI gate exists
- doc-consistency checks exist
- protected-zone regression discipline is documented
6. Release Candidate Gate
Goal: define a real stop/go boundary for production release.
A release candidate should not be cut until all of the following are true:
- targeted unit matrix passes
- release acceptance matrix passes
- primary docs reflect current behavior
- compatibility notes are written
- versioning decision is recorded
- no unresolved protected-zone contradiction is known
- root public exports in
moira.__init__have had final review
Exit criteria:
- release-candidate checklist signed off
7. Recommended Sequence
- Draft release notes and compatibility notes.
- Complete the remaining documentation sweep.
- Formalize the acceptance matrix in CI.
- Audit the remaining specialist modules.
- Cut a release candidate.
- Run one final regression and acceptance pass.
- Release.
8. Current Assessment
Current state:
- engine integrity is substantially stronger than before the audit passes
- high-risk temporal and semantic defects have been removed from core subsystems
- public API truth is much better aligned with runtime behavior
- major doctrinal engines now have better boundary discipline
This supports the following practical assessment:
Moira is near release candidate quality at the engine level, but should still complete the final release-contract, documentation, and acceptance steps before being described without qualification as fully production ready.