moira

Physical Heliacal Visibility Implementation Plan

Date: 2026-08-07 Status: Phases 0 through 7 complete at the local engine-release boundary; site-specific moonlight experiment quarantined; publication and website work remain separate Scope: Moira engine truth, offline reference-data production, public Python contracts, REST transport, validation, native strengthening, release documentation, and later website adoption

Purpose

This document is the governing implementation checklist for Moira’s next physical heliacal-visibility model.

The project is an additive modernization. It is not a repair to the admitted legacy heliacal public surface, and it does not silently reinterpret any existing visibility-policy value.

The intended result is a versioned, opt-in, naked-eye point-source visibility stack with:

The current model remains authoritative for its existing contract until every required admission gate in this document passes.

North-Star Scope Guard

The product being completed is an opt-in, deterministic, offline physical heliacal-visibility assessment and event model. It needs enough source-backed sky-background truth to evaluate the naked-eye visibility margin; it is not a general-purpose atmospheric spectroscopy package and does not need to expose libRadtran or MYSTIC at runtime.

Phases 0 through 3 own the doctrine, single-epoch calculation, and physical event search. Phase 4 owns the general background-composition, directional horizon, and observer-protocol contracts. Phase 5 public-contract parity and the bounded Phase 6 native admission are complete.

Phase 7 is limited to evidence binding, exact 1.2.0 resource validation, offline packaging and clean-install checks, final documentation, and the release receipt. Site-specific Jones/Paranal work is quarantined research and cannot reopen or block this release without a separately authorized project.

Reading Rule

A checked task means the named work and its evidence receipt are complete. Writing code, producing a table, or passing a narrow unit test is not by itself a completed phase.

Quarantined scope is not unfinished work. It may be reopened only as a new source-and-admission project with an explicit contract proposal.

Current Engine Baseline

The existing Python implementation in moira/heliacal.py provides:

The admitted physical path is intentionally bounded:

The current native implementation in src/native/include/visibility.hpp contains the admitted legacy arcus computation and fixed-star search support. It does not contain the newer physical assessment stack.

The current public-contract gaps relevant to this project are:

These are modernization inputs, not evidence that the existing legacy event contract is broken.

Completion Boundary

The first public physical-event release requires Phases 0 through 5 and Phase 7 to close.

Phase 6 is a measured performance decision. Scientific completion does not require moving policy or doctrine into C++.

The website is downstream. Website presentation begins only after the engine, transport, and release-documentation gates close.

Non-Negotiable Compatibility Rules

Frozen composite model identifier: clear_sky_naked_eye_point_source_v1.

The identifier is a first-class immutable model family, not a mutable alias for the newest implementation.

Phase 0 decisions are governed by:

Source Hierarchy

The implementation must distinguish current admitted components from candidate modernization sources.

Source or model Planned role Admission boundary
Schaefer 1990/1993 Preserve the existing named component model and use it as a regression/reference family Do not silently replace its formulas
Kasten and Young 1989 Preserve the existing broadband relative-air-mass option Do not extend beyond its admitted domain
Krisciunas and Schaefer 1991 Preserve the current moonlight option A modern moonlight model receives a new identifier
Crumey 2014 Preserve the current scotopic component and source the separately named full-range point-source candidate Twilight use requires independent observational validation
libRadtran 2.0.6 Offline reference generator for direct transmission and directional twilight radiance No installed-runtime dependency or invocation
CIE MES2 Declared photopic/scotopic spectral weighting across adaptation states A weighting system, not a point-source detection threshold
CIE photopic response Versioned V(lambda) response data Kept in the separately licensed data pack
CIE scotopic response Versioned V'(lambda) response data Kept in the separately licensed data pack
Tousey and Koomen 1953 Source-owned twilight comparison observations Validation evidence, not a universal coefficient table
Jones et al. 2013 Historical site-specific moonlight research Quarantined on 2026-08-07; no runtime, API, packaged resource, release gate, or active-roadmap dependency
ESO SkyCalc Component comparison and validation reference Never claim global authority from a site model
PALACE Airglow research and component-validation reference Site-bound unless independent evidence supports expansion

No formula may be implemented from recollection or a secondary summary when the primary paper, official dataset, or official software documentation is available.

Architecture

Governing Python layer

moira/heliacal.py continues to own:

The new numerical implementation should not make that protected module a monolith. Candidate internal modules are:

moira/sky/visibility.py remains a public re-export boundary rather than a second doctrine owner.

Offline reference-data layer

Candidate build surfaces are:

Full spectral outputs remain research or validation artifacts. The runtime table should carry only the response-integrated products required by the admitted public model. The engine runtime receives an explicit caller-supplied data-pack path and never downloads the pack.

Native layer

Native work is deferred until after Python admission and benchmarking. Candidate native responsibility is limited to:

Native code must not decide model defaults, event meanings, fallback policy, failure reasons, or provenance.

Phase Status

Phase Gate Status Completion receipt
0 Doctrine, source, licensing, and contract lock Complete Closure receipt below
1 Reproducible atmospheric reference laboratory Complete Checkpoints 1-6, radiance/response checkpoint, and closure receipt
2 Python spectral single-epoch truth Complete Closure receipt
3 Physical visibility-event solver Complete Closure receipt and restart checkpoint
4 Background composition, horizon, observer protocol, and research disposition Complete Background, horizon, observer, and quarantine decision
5 Public contract parity Complete Closure receipt
6 Optional native strengthening Complete Closure receipt
7 Validation, admission, release, and documentation Complete locally Validation authority and closure receipt below

Phase 0 - Doctrine, Source, and Contract Lock

Event doctrine

Supported physical domain

Input and fallback doctrine

Source and licensing ledger

Public contract sketch

Phase 0 exit gate

Phase 0 Closure Receipt

Date: 2026-07-29

Commit: Uncommitted working tree; no commit or push was requested for Phase 0.

Runtime: Python 3.14.3 for documentation tooling only.

Implemented: Source ledger, four-phase physical event doctrine, validity and input boundaries, data-pack and licensing disposition, additive public-contract sketch, stable typed failure reasons, and frozen composite model identity.

Explicitly unchanged: Engine calculations, native code, packaged data, public Python exports, facades, serializers, REST routes/models, OpenAPI, validation claims, existing enum strings, existing defaults, and existing legacy output shapes.

Source/data identities: Schironi 2024 DOI 10.1515/9783111314532-002; Crumey 2014 DOI 10.1093/mnras/stu992; Tousey-Koomen 1953 DOI 10.1364/JOSA.43.000177; libRadtran 2.0.6 archive SHA-256 64930cc40b6e4a37aa220520974d330fc1563796f466a649b2238131f2d69840; CIE photopic DOI 10.25039/CIE.DS.dktna2s3, SHA-256 ee5d5d17922ae645d4af52cacf6a50bdb9385749f9d2181ca312eb2b08febac2; CIE scotopic DOI 10.25039/CIE.DS.gr6w4b5g, SHA-256 6a75d3fdbcbf5e9e9a07478511933eefeda953f3e2cc14b74459e5a099ec3759.

Tests: scripts/check_doc_consistency.py passed; focused tests/unit/test_git_wiki_sync.py passed (1 passed); the five changed canonical/generated pages passed exact targeted synchronization; and git diff --check passed.

Independent validation: Primary-source and official-software/data cross-check only. No numerical model has been admitted or validated by this documentation phase.

Known limitations at Phase 0 closure: No generator environment, atmospheric table, Python physical model, event solver, transport, native work, or released artifact existed at that gate. The Phase 1 checkpoint below supersedes the generator portion of this historical statement. The repository-wide wiki check still reports the pre-existing API_REFERENCE.md and REST_API_REFERENCE.md mirror drift; those unrelated generated updates were kept outside this Phase 0 edit boundary.

Next authorized phase: Phase 1, Reproducible Atmospheric Reference Laboratory.

Phase 1 - Reproducible Atmospheric Reference Laboratory

Generator environment

Checkpoint 1 established the candidate grid envelopes below but did not freeze their final sparse nodes. The fixed-budget geometry smoke showed reported relative uncertainty ranging from 0.44% to 67.54%, plus one zero-contribution case with no estimable relative uncertainty. Therefore the reference-grid boxes remain open until the adaptive design, deep-twilight law, and solver-error budget are admitted. Checkpoint 2 below closes the bounded elevated-site construction gate without freezing production grid nodes. Checkpoint 3 source-traces the deterministic surface direct-beam law and admits a 290-level refinement for controlled exponential-atmosphere geometry only. Checkpoint 4 validates that refinement across all six AFGL named atmospheres, binds the official external REPTRAN module, and admits REPTRAN fine as the full-spectral research reference. Checkpoint 5 source-binds the environmental parameter roles, candidate nodes, reserved holdouts, all eight named Shettle profiles, measured-pressure policy, and delta-M-safe direct-extinction oracle. Checkpoint 6 admits the site-relative observer-altitude and pressure-ratio interpolation law against 12,636 withheld spectral values across all six molecular profiles. The final radiance/response checkpoint admits the 4-by-4-by-4 response grid, nine untouched response holdouts, 57-node direct surface, binary32 storage, per-cell uncertainty, and fail-closed deep-twilight law. The separately validated 1.0.0 data pack closes Phase 1 with an explicit fixed-environment baseline.

Direct-transmission pilot

Elevated-site construction

Reference grid

Runtime table

Data-pack implementation

Phase 1 exit gate

Phase 1 Checkpoint 1 Receipt

Date: 2026-07-29

Status: In progress; not a closure or model-admission receipt.

Implemented: Offline source-locked generator, complete artifact validator, deterministic MYSTIC input rendering, fixed-seed convergence profile, six-case geometry smoke profile, deterministic direct-transmission smoke profile, immutable external receipts, compact source-owned checkpoint, and current-wheel boundary audit.

Evidence: PHYSICAL_HELIACAL_VISIBILITY_PHASE1_CHECKPOINT_2026-07-29.md. The exact convergence, geometry, and direct-transmission root-manifest SHA-256 values are f5246c0b54b7f1e1cb126a275df5a6c425cf71759d7afcf704dff14d991c2487, 736cb97e0f5e4218bb386f0290454cc15140438126ca1ded70b3b54f49a9d10a, and 5eaac5edd15081836ef1a57c62e360421a5bd73f71276095cb0cd6ea78b80aa1.

Explicitly unchanged: Engine calculations, public contracts, native code, facades, serializers, REST/OpenAPI, installed dependencies, default policies, and release identity.

Open: Elevated-site construction, full direct-transmission spectral design and near-horizon error bound, adaptive sparse radiance design, spectral production, untouched holdout execution, storage/interpolation selection, error propagation, separate data-pack construction, and the Phase 1 exit gate.

Next authorized work: Continue Phase 1 only. Phase 2 remains inactive.

Phase 1 Checkpoint 2 Receipt

Date: 2026-07-29

Status: Elevated-site construction gate passed for named-profile-derived pressure; Phase 1 remains in progress.

Implemented: Separate immutable elevated-site specification, source-equivalent atmosphere and O4 profile construction, 45 deterministic altitude-oracle comparisons, seven spherical MYSTIC smoke/control cases, generation-identity-safe resume, complete central-profile binding, independent validator, and compact source-owned checkpoint.

Evidence: PHYSICAL_HELIACAL_VISIBILITY_PHASE1_ELEVATED_SITE_CHECKPOINT_2026-07-29.md. The root-manifest SHA-256 is 823ac54a3a6a52a5ab709bffb80693ffc945f800c6957f9024053c52289557ff.

Closed: The source-justified nonzero-observer-altitude construction for the U.S. Standard atmosphere at 0-5,000 m with profile-derived pressure. The initial O4 noncommutativity discrepancy was repaired without relaxing a tolerance.

Explicitly unchanged: Engine calculations, public contracts, native code, facades, serializers, REST/OpenAPI, installed dependencies, default policies, release identity, and checkpoint 1 identities.

Open: Production altitude/pressure dimension policy, full direct-transmission spectral design and near-horizon error bound, adaptive sparse radiance design, deep-twilight law, spectral production, untouched holdout execution, storage/interpolation selection, error propagation, separate data-pack construction, and the Phase 1 exit gate.

Next authorized work: Continue Phase 1 only. Phase 2 remains inactive.

Phase 1 Checkpoint 3 Receipt

Date: 2026-07-29

Status: Controlled direct-transmission geometry gate passed; Phase 1 remains in progress.

Implemented: Source-traced libRadtran surface direct-beam semantics, a separately versioned pure-absorption exponential-atmosphere probe, independent midpoint-Chapman and continuous spherical-path oracles, a 50-level source-grid control, a 290-level refined candidate, 144 nonrepeat cases, one byte-identical repeat, complete artifact binding, an independent validator, and a compact source-owned checkpoint.

Evidence: PHYSICAL_HELIACAL_VISIBILITY_PHASE1_DIRECT_GEOMETRY_CHECKPOINT_2026-07-29.md. The external root-manifest SHA-256 is b69b377bd465b4740ef0dacd802c03d9fb6ee9eaf809a41356d60126dd23cd92.

Closed: The deterministic surface direct-beam implementation trace, admitted-domain solver-versus-reconstruction agreement, positive-altitude extraction check, and controlled continuous-atmosphere error bound for the 290-level candidate. Its maximum midpoint-Chapman versus continuous error is 0.0003497406476989963, below the frozen 0.001 relative tolerance. The coarse source-grid control reaches 0.10138558685013145.

Explicitly unchanged: Engine calculations, public contracts, native code, facades, serializers, REST/OpenAPI, installed dependencies, default policies, release identity, and checkpoint 1 and 2 identities.

Open: Named-atmosphere and full-spectral direct-transmission validation, production altitude/pressure dimension policy, adaptive sparse radiance design, deep-twilight law, spectral production, untouched holdout execution, storage/interpolation selection, error propagation, separate data-pack construction, and the Phase 1 exit gate.

Next authorized work: Continue Phase 1 only. Phase 2 remains inactive.

Phase 1 Checkpoint 4 Receipt

Date: 2026-07-30

Status: Named-atmosphere full-spectral direct-transmission gate passed for the clear molecular surface domain; Phase 1 remains in progress.

Implemented: An official external REPTRAN-module receipt, a canonical 1,478-file merged data-root receipt, all six AFGL atmosphere profiles, 290/579/1,157-level vertical controls, a 380-780 nm spectrum at 0.05 nm output spacing, REPTRAN medium/fine characterization, 50 resumable bulk runs, four governing DISORT anchors, a fixed-input repeat, an independent cross-platform validator, and a compact source-owned checkpoint.

Evidence: PHYSICAL_HELIACAL_VISIBILITY_PHASE1_NAMED_SPECTRAL_DIRECT_CHECKPOINT_2026-07-30.md. The external root-manifest SHA-256 is b2bac79b30a3458fe17f8446b3da40f61deba1d7320b679724ebd60a65a539e8.

Closed: The clear molecular named-atmosphere full-spectral reference gate. The conservative combined 290-level candidate error is 0.0027130750801615698, 0.0019078467868691084, and 0.0013040152001478783 mag in 1, 5, and 20 nm bins. All four DISORT anchors are byte-identical to their bulk direct-beam counterparts. REPTRAN fine is admitted as the research reference; REPTRAN medium is not a full-spectral truth substitute.

Explicitly unchanged: Engine calculations, public contracts, native code, facades, serializers, REST/OpenAPI, installed dependencies, default policies, release identity, runtime tables, and checkpoint 1-3 identities. The REPTRAN archive is not redistributed.

Open: Production altitude/pressure policy, aerosol/AOD/Angstrom/ozone/albedo dimensions, adaptive sparse radiance design, deep-twilight law, versioned CIE and target-spectrum inputs, response-integrated spectral production, untouched holdouts, storage/interpolation selection, error propagation, separate data-pack construction, and the Phase 1 exit gate.

Next authorized work: Continue Phase 1 only. Phase 2 remains inactive.

Phase 1 Checkpoint 5 Receipt

Date: 2026-07-30

Status: Environmental-parameter semantics gate passed; Phase 1 remains in progress.

Implemented: A separately versioned 73-run environmental-contract probe, complete source/tool/file receipt, all eight Shettle haze/season profiles, AOD550 and Angstrom binding, ozone-column values, gray-albedo role, profile-relative measured-pressure policy, temperature/humidity ownership, raw delta-M diagnostics, a delta-M-safe direct-extinction oracle, exact repeat, independent cross-platform validator, and compact source-owned checkpoint.

Evidence: PHYSICAL_HELIACAL_VISIBILITY_PHASE1_ENVIRONMENT_CONTRACT_CHECKPOINT_2026-07-30.md. The external root-manifest SHA-256 is e79a250b01f00783f272bae409fa323a94b5c7811375760bf536eaa7de6b0580; the generation fingerprint is 882f23ac18053ca616b01f175c31cc26a4c68411021506d80d8d308659060cb4.

Closed: Environmental parameter roles, units, candidate nodes, reserved holdouts, pressure ownership, the full named aerosol inventory, direct-versus-radiance dimension ownership, and direct-beam delta-M contamination. The 73-case artifact passed independent validation under WSL and Windows. Its near-horizon AOD evidence rejects linear unit-AOD scaling across the full admitted AOD range.

Explicitly unchanged: Engine calculations, public contracts, native code, facades, serializers, REST/OpenAPI, installed dependencies, default policies, release identity, runtime tables, data-pack authorization, and checkpoint 1-4 identities.

Open: Altitude and pressure-ratio holdout execution, environmental interpolation, solar/target/azimuth adaptive radiance nodes, deep-twilight sampling and convergence, versioned CIE and target-spectrum inputs, response-integrated spectral products, storage/interpolation selection, error propagation, separate data-pack construction, and the Phase 1 exit gate.

Next authorized work: Continue Phase 1 with the altitude/pressure holdout study. Phase 2 remains inactive.

Phase 1 Checkpoint 6 Receipt

Date: 2026-07-30

Status: Altitude/pressure interpolation gate passed; Phase 1 remains in progress.

Implemented: A separately versioned 5,037-run artifact across all six named molecular profiles; eight observer-altitude nodes from 0 through 5,000 m; five profile-relative pressure nodes; 14 altitude and eight pressure holdouts; site-relative 290-level atmospheres; bilinear interpolation in extinction magnitude; a complete source/tool/file receipt; an independent cross-platform validator; and four preserved failed-design receipts.

Evidence: PHYSICAL_HELIACAL_VISIBILITY_PHASE1_ALTITUDE_PRESSURE_INTERPOLATION_CHECKPOINT_2026-07-30.md. The external root-manifest SHA-256 is 2264727cf4d1a74bb747aa51cc44e4ba9e703e09c132ab57eb2c0afef863c727; the generation fingerprint is ef95bba5a00667ce3bd1d983f9b9de93b989bd315da0e702f3342153d07bf165.

Closed: Observer-altitude and pressure-ratio production nodes, site-relative atmosphere construction, complete-cell and no-extrapolation laws, and the withheld interpolation gate. Across 12,636 evaluated values, maximum extinction error is 0.0124663582904496 mag, 95th-percentile error is 0.00404537460338972 mag, and maximum relative transmission error is 0.0114162743931566. All fixed ceilings pass without relaxation.

Explicitly unchanged: Engine calculations, public contracts, native code, facades, serializers, REST/OpenAPI, installed dependencies, default policies, release identity, runtime tables, data-pack authorization, and checkpoint 1-5 identities.

Open: The adaptive solar/target/azimuth radiance grid, deep-twilight law, CIE response integration, untouched directional holdouts, storage precision, separate data-pack construction, and the Phase 1 exit gate.

Next authorized work: Continue Phase 1 with adaptive radiance and response integration. Phase 2 remains inactive.

Phase 1 Radiance/Response Checkpoint Receipt

Date: 2026-07-30

Status: Adaptive radiance, response integration, direct interpolation, storage, and deep-twilight gates passed.

Implemented: A 662-run, 5,621-file v9 reference artifact; a 4-by-4-by-4 solar/target/azimuth grid; nine untouched response holdouts; source-locked CIE photopic/scotopic integration; training-only selection of a balanced 531 nm importance reference; 57 direct-extinction training nodes and 22,400 untouched holdout bins; per-cell solver uncertainty; binary32 storage; and eight preserved rejected-design receipts.

Evidence: PHYSICAL_HELIACAL_VISIBILITY_PHASE1_RADIANCE_RESPONSE_CHECKPOINT_2026-07-30.md. The external root-manifest SHA-256 is 6bb91212d1d54762af8276ea066b4c6d5f4df837d84a46057f57b35924bae12f; the generation fingerprint is aef8bdc07948ff5367dba1834baea708dfea0bc0dffb6898899dabc6f231c8c0.

Closed: Photopic/scotopic response interpolation passes the unchanged maximum/p95 ceilings; direct interpolation passes 0.05/0.02-mag ceilings; binary32 storage error is below 1e-5 mag; a Monte Carlo zero is not physical zero; modeled twilight below -9 degrees is typed not_evaluable; and the monochromatic reconstruction is explicitly diagnostic rather than a shipped or gating surface.

Explicitly unchanged: Engine calculations, public contracts, native code, facades, serializers, REST/OpenAPI, installed dependencies, default policies, release identity, and runtime loader state.

Next authorized work: Compile and validate the separate data pack. Phase 2 remains inactive until the Phase 1 exit gate passes.

Phase 1 Closure Receipt

Date: 2026-07-30

Status: Complete. Phase 2 is now the next authorized phase.

Implemented: The separately licensed moira-physical-heliacal-visibility data pack version 1.0.0; an exact-inventory independent validator; a metadata-only compatibility contract; pack notice, provenance, and checksums; dual-platform validation; and a compact closure receipt binding every admitted Phase 1 checkpoint.

Evidence: PHYSICAL_HELIACAL_VISIBILITY_PHASE1_CLOSURE_2026-07-30.md. The admitted pack root-manifest SHA-256 is 49ac2b68ea105a8e055b27e8d4d70f6cbfe9533f971ef5e6000f0bdd95d6771b; the generation fingerprint is b0d09b91086c2b3064e6c56cfaeae97226e7a6b2779fd70c5b7807aeab748750. The source-controlled closure receipt SHA-256 is 6daaa62566214747dd50bc449da577065a2484c707ec39b7c1d88dafb0778776.

First-pack domain: U.S. Standard, rural-summer, sea-level fixed baseline at 1013.25 hPa, AOD550 0.1, Angstrom exponent 1.3, ozone 300 DU, and gray albedo 0.2. Solar-center altitude is -9 through 0 degrees, target true altitude is 0.25 through 45 degrees, and relative solar azimuth is 0 through 180 degrees. All other environments are typed outside this pack’s domain; earlier environmental evidence is not mistaken for absent pack axes.

Explicitly unchanged: No engine or native code, public contract, API transport, installed dependency, default, legacy output, tag, release, website, or deployment was changed. No CIE table or libRadtran/REPTRAN source file entered the MIT wheel. No engine loader exists yet.

Acceptance: The immutable source artifact and final pack passed independent Linux and Windows validation with matching identities. Focused Phase 1 unit tests, Ruff, documentation consistency, wiki synchronization, and diff checks are the closing repository gate for the scoped Phase 1 commit.

Next authorized work: Phase 2, Python Spectral Single-Epoch Truth. It must validate an explicit caller-supplied pack, enforce the exact manifest domain, preserve typed failures, and leave event-time solving to Phase 3.

Phase 2 - Python Spectral Single-Epoch Truth

Policy and vessels

Physical calculation

Background precedence

Verification

Phase 2 closure receipt - 2026-07-30

The engine now has a no-search/no-download loader for explicit local pack versions 1.0 and 1.1, exact identity and checksum validation, bounded interpolation, CIE MES2 adaptation, the Crumey full-range point-source threshold, non-overlapping background composition, response-weighted target extinction, typed single-epoch truth, a declared data-pack numerical-error envelope, and additive owning-module vessels.

Pack version 1.1 adds pack-owned, source-locked physical spectral profiles for Mercury, Venus, Mars, Jupiter, and Saturn. The public assessment no longer accepts caller-supplied planetary response weights. Moira resolves apparent V-band magnitude, phase angle, and Saturn ring geometry from one engine-owned photometry context; source-domain violations return typed non-evaluable results rather than extrapolation.

The admitted 1.1 root manifest SHA-256 is f594fd12058cc7f5c7bc9de7f2b06652bef3c0604ef7b0a05a069e54e4026c87; the target-profile payload SHA-256 is 40f4362aca22e329ad25916efa8476fee7a86eb1a6b0dfc1cf1b6c88f64531a0. An independent read-only validator rederived the profiles from the locked Payne, Mallama, CIE, and solar-spectrum sources without importing either the builder or engine. A second immutable build reproduced all 13 files exactly.

The three stale legacy fixture boundaries were completed at their mocked resource edges, including the Yallop event, fixed-star not-found, and KS1991 assessment cases. The full focused legacy selection now passes 496 tests with one pre-existing empty optional enumeration skipped; no failure is deselected. The focused Phase 2 selection passes all 88 tests. The combined gate collects 585 tests, passes 584, skips that same optional enumeration, and deselects nothing. JSON-safe and immutable pickle round trips pass without claiming Phase 5 facade, REST, or OpenAPI parity.

The Phase 2 error-budget receipt propagates plus or minus one maximum-contributing per-cell solver relative standard error, maximum background interpolation error, direct-extinction maximum interpolation error, and binary32 storage error. It reports lower and upper limiting-magnitude and visibility-margin envelope limits plus a visible/not_visible/indeterminate classification limited to those pack numerical terms. The solver term is not relabeled as a hard maximum. P95 interpolation values remain diagnostics rather than bounds. Measurement, planetary-source/model, observer-population, and actual atmospheric uncertainty are named separately and are not fabricated into an aggregate confidence interval.

Detailed evidence is recorded in PHYSICAL_HELIACAL_VISIBILITY_PHASE2_CLOSURE_2026-07-30.md. The earlier implementation state remains in PHYSICAL_HELIACAL_VISIBILITY_PHASE2_CHECKPOINT_2026-07-30.md.

Phase 2 exit gate

Phase 3 - Physical Visibility-Event Solver

The governing threshold is:

visibility_margin(t)
    = limiting_magnitude(t) - conditioned_target_magnitude(t)

Solver implementation

Event receipt

Body and dispatch behavior

Verification

Phase 3 closure receipt - 2026-07-30

The additive Python event solver is closed for Mars, Jupiter, Saturn, and Sirius across all four physical phases. Mercury and Venus remain valid Phase 2 single-epoch targets but fail closed for event search because first/last guard days can leave their source-owned phase-angle domains.

Exact data-pack version 1.2 preserves every admitted version 1.1 payload byte and adds the BSC5/CALSPEC/CIE Sirius profile. An independently implemented validator rederived that profile from checksum-locked local sources, and a second offline build reproduced all 14 files byte-for-byte.

Crossing completeness is governed by source-controlled certificate physical-heliacal-event-lipschitz-v1. An independent validator recomputed the runtime log-altitude direct-extinction derivative, all table-coordinate slopes, astronomical coordinate bounds, and the 8,799.9842 magnitude/day derived margin ceiling below the admitted 16,384 ceiling. Same-sign intervals that cannot be excluded are recursively enclosed; an unwitnessed possible zero returns crossing_completeness_not_certified.

Source-owned event goldens use JPL Horizons for Jupiter and the Sun, and Hipparcos plus the offline Astropy/ERFA/IERS transform for Sirius. The current engine event differs from those independent one-minute-grid interpolants by 1.21 seconds for Jupiter and 2.56 seconds for Sirius, within the declared 60-second oracle tolerance. Both independent guard-day evaluations remain non-qualifying.

The detailed scope, receipts, commands, limitations, and next boundary are in PHYSICAL_HELIACAL_VISIBILITY_PHASE3_CLOSURE_2026-07-30.md.

Phase 3 exit gate

Phase 4 - Moonlight, Airglow, Horizon, and Local Realism

Moonlight

Airglow and natural background

Horizon and observer

Phase 4 site-specific moonlight research disposition - 2026-08-07

The Jones/Paranal investigations produced source-audit and falsification evidence, including failed and superseded numerical designs. They did not become part of the general physical-visibility product. The branch is now quarantined and is not a Phase 7 prerequisite.

The detailed experiment state is preserved in historical research records and the external recovery archive. The governing product boundary and reopening rule are recorded in PHYSICAL_HELIACAL_VISIBILITY_JONES_PARANAL_QUARANTINE_2026-08-07.md.

Phase 4 exit gate

Phase 5 - Public Contract Parity

Python surfaces

REST surfaces

Affected transport files

The exact edit set must be re-established from the checkout at Phase 5 start. This list is an inventory, not permission to modify every file.

Phase 5 closure receipt - 2026-08-04

The additive physical assessment/event functions and their admitted contract types now preserve object identity across moira.heliacal, the curated moira root, moira.facade, and moira.sky.visibility. Matching Moira methods forward the complete engine policy and search policy without introducing facade defaults.

The REST surface exposes dedicated physical assessment and event routes under /v1/visibility. Requests are strict, fully typed, and contain no data-pack filesystem field. The external physical pack directory and optional manifest pin are server-owned through MOIRA_SERVER_PHYSICAL_VISIBILITY_DATA_PACK_DIRECTORY and MOIRA_SERVER_PHYSICAL_VISIBILITY_DATA_PACK_MANIFEST_SHA256. An unconfigured server fails with the existing typed error-envelope shape and HTTP 503.

Every field in the 16 engine assessment, event, pack, and nested receipt dataclasses is matched by the corresponding response model. Runtime transport tests preserve dependency, atmosphere, observer, horizon, solver, sensitivity, and nested pack-identity receipts. The recorded legacy assessment and general visibility-event schemas remain exact, and no physical field was added to either legacy response.

The generated REST inventory now records 440 paths and 440 operations. The final physical visibility, Phase 5, and legacy compatibility gate collected 299 tests: 297 passed and the two exact external-pack goldens skipped because their opt-in pack environment variable was not set. The complete evidence, scope boundary, and restart point are recorded in PHYSICAL_HELIACAL_VISIBILITY_PHASE5_CLOSURE_2026-08-04.md.

Phase 5 exit gate

Phase 6 - Optional Native Strengthening

Admission decision

Candidate native work

Phase 6 exit gate

Phase 6 closed on 2026-08-04 with exactly two private numerical kernels: response-weight resolution and bracketed direct-extinction interpolation. The benchmark decision, complete-domain Python/native differential, deterministic threaded replay, event-result replay, invalid-domain checks, and separated tolerances are recorded in PHYSICAL_HELIACAL_VISIBILITY_PHASE6_CLOSURE_2026-08-04.md. Python continues to own resource admission, model and policy identity, domains, typed failures, event semantics, and result construction.

Phase 7 - Validation, Admission, Release, and Documentation

Phase 7 closure receipt - 2026-08-07

Phase 7 closed on the core 1.2.0 release boundary. The Jones/Paranal experiment is quarantined and was not required for closure.

The release candidate has a core-only release identity and notice, deterministic external-pack archiver, evidence registry, generated capability matrix, and generated API inventory. Focused engine, public-contract, REST, spectral, event, release-identity, and strict-known-issues gates pass.

The original closure recorded independent Jupiter and Sirius validators at 1.206 and 2.564 seconds from the source-owned interpolants, inside the declared 60-second oracle tolerance. Those two cases remain valid Phase 3 evidence, but they are no longer the complete Phase 7 release-readiness claim. The 2026-08-09 broad-oracle hardening below supersedes that narrow interpretation. The independent crossing certificate still recomputes an 8,799.9842 magnitude/day ceiling below the admitted 16,384 ceiling.

The full offline artifact validator built a clean wheel and sdist, rebuilt and clean-installed a wheel from the sdist, imported the native backend, loaded the exact external pack under a socket-deny guard, found no embedded external payload, and emitted tests/artifacts/release/physical_visibility_phase7_release_validation_2026-08-07.json. That receipt records a local release candidate only; no tag, publication, installation into a downstream product, deployment, or website update occurred.

Phase 7 broad-oracle hardening - 2026-08-09

Before release, the public four-target/four-phase surface was re-audited as a complete 16-cell matrix. Twelve cells now have independently reconstructed event times from 40 checksum-bound JPL source files plus the pinned Hipparcos/Astropy Sirius path. Every timed cell is inside the fixed 60-second external-grid limit; the worst residual is 5.8789461851119995 seconds. The remaining four cells are explicitly labeled typed no-event/domain engine regressions and are not counted as event-time oracles.

The independent reconstruction also checks the target boundary against the requested morning/evening solar side on both the selected and adjacent guard days. This closes the false-positive route where a raw visibility-margin zero exists on a day that does not own the requested rising/setting phase.

The offline independent replay, immutable-golden governance, and live public engine replay all pass. The exact evidence and limitations are recorded in PHYSICAL_HELIACAL_VISIBILITY_BROAD_ORACLE_2026-08-09.md. The release artifact validator is rerun against this hardened source snapshot and records its local receipt at tests/artifacts/release/physical_visibility_phase7_release_validation_2026-08-09.json. No release, installation, deployment, website, or Workspace action is part of this engine-only hardening.

Phase 7 integration and provenance hardening - 2026-08-11

The broad-oracle checkpoint was admitted on the current integration branch without changing engine calculations. The exact 5,311-byte source-acquisition specification was recovered and preserved separately from the later admitted matrix. Its SHA-256, ba061013c6e6258475baab4442b072c82c887aabc840cc19f5b0126542eb9323, matches the archived NASA/JPL source manifest. Governance now proves that all acquisition-driving fields remain identical to the admitted matrix, and the acquisition tool rejects any different input.

The 47 external source files are preserved in the verified external archive physical-visibility-phase7-source-bundle-2026-08-11.zip, SHA-256 ebad4060250702c2dff378c960a67de657dab9a5366856825907e93f88b4e103. The source-controlled recovery receipt records its 48-entry inventory and verification checks. Git LF policy now covers every Phase 7 byte-bound text artifact, closing the Windows checkout failure without changing a release identity or external-source checksum.

The current integrated engine replay passed all 16 matrix cells against content-admitted DE441 and the exact 1.2.0 pack, with no skip or resource failure. The project integration environment contained no NumPy. The isolated Astropy/ERFA Sirius authority-validation toolchain remains development-only and is not part of the engine replay or published runtime. No tag, package publication, downstream installation, deployment, website, or Workspace action was authorized by this admission.

Evidence classes

Agreement with another engine is corroboration, not primary authority. Snapshots are regression evidence, not scientific truth.

Tolerance law

Documentation and release

Phase 7 exit gate

Cross-Phase Validation Inventory

The working validation surface includes:

Each phase must re-inventory the current test tree before changing it. New tests should be placed beside the owning layer instead of accumulating in one unscoped integration file.

Quarantined Scope

The following are closed exclusions from this roadmap:

Reopening one of these requires:

  1. an identified source and validity domain;
  2. a separate policy and contract proposal;
  3. explicit authorization;
  4. independent validation evidence; and
  5. a new admission receipt.

It must not be added to a later phase as if it were forgotten work.

Work Protocol

At the beginning of each phase:

At the end of each phase:

Completion Receipt Template

Append one receipt for every closed phase:

### Phase N Closure Receipt

Date:
Commit:
Runtime:
Implemented:
Explicitly unchanged:
Source/data identities:
Tests:
Independent validation:
Known limitations:
Next authorized phase:

The project is complete only when all required phases carry closure receipts, all required checkboxes are satisfied, and the released artifact preserves the exact admitted engine, data, transport, and documentation identity.