moira

Physical Heliacal Visibility Phase 2 Closure

Date: 2026-07-30 Status: complete

Governing roadmap: PHYSICAL_HELIACAL_VISIBILITY_IMPLEMENTATION_PLAN.md

Closure Boundary

Phase 2 closes Python spectral single-epoch truth for the first admitted planetary targets. It does not activate:

The legacy Schaefer/arcus event path remains the default and retains its existing identifiers and behavior.

Admitted Runtime Contract

physical_visibility_assessment() is an additive owning-module surface. It requires:

The runtime does not search for, download, regenerate, or silently replace a pack. Missing, corrupt, incompatible, incomplete, and out-of-source-domain inputs return typed non-evaluable results.

Pack version 1.0 remains loadable for its Phase 1 atmosphere tables. It has no planetary target profiles, so the Phase 2 public assessment returns target_spectral_profile_missing. Pack version 1.1 adds the source-locked planetary profiles required for evaluation.

The public assessment has no caller-supplied planetary spectral-profile parameter. Apparent V magnitude, phase angle, and Saturn effective ring sub-latitude are resolved from one engine-owned ephemeris context. The validated pack then resolves the matching response integrands and color law.

Exact Data-Pack Receipt

pack_id:
  moira-physical-heliacal-visibility
version:
  1.1.0
compatibility_id:
  moira-physical-heliacal-visibility-data-pack-v1.1
manifest_sha256:
  f594fd12058cc7f5c7bc9de7f2b06652bef3c0604ef7b0a05a069e54e4026c87
target_profile_sha256:
  40f4362aca22e329ad25916efa8476fee7a86eb1a6b0dfc1cf1b6c88f64531a0
generation_fingerprint:
  281b3fdaa1910d81ebf9ec616cbed0784eed5a33f05bbdc682baee34b4db8848
payload_file_count:
  12

The admitted external artifact is:

/home/nilad/.cache/moira/visibility-reference-lab/data-packs/
moira-physical-heliacal-visibility-1.1.0-v3

A clean second build at the v4 path produced the same 13 root files, byte-for-byte, including the root manifest. Neither build modified the admitted Phase 1 pack.

The v1 and v2 construction attempts are preserved as rejected forensic artifacts. v1 had not yet narrowed the Payne source spectra to the admitted positive visible subset. v2 omitted explicit empty limitations arrays required by the strict color-model schema. Neither is admitted.

Planetary Profile Authority

The 1.1 pack owns 400-bin, 380-779 nm photopic and scotopic response integrands for:

The base spectral shapes derive from the versioned Payne et al. planetary geometric-albedo spectra multiplied by the locked extraterrestrial solar spectrum and integrated against the exact CIE photopic and scotopic response data.

Mallama et al. 2017 supplies the source-domain broadband color behavior:

The runtime uses a named piecewise-linear Johnson-Cousins differential magnitude warp, normalizes both response paths independently, and updates the S/P ratio consistently. It never extrapolates a color law beyond its source domain.

The compact source and numerical receipt is:

tests/artifacts/visibility_reference_lab/
phase2_planetary_target_profiles_checkpoint_2026-07-30.json

Numerical Truth

The admitted compositor includes:

The observer protocol remains:

known_location_directed_averted_observation_v1

It is a known-location, deliberately directed, peripheral/averted task. It is not claimed as a central/foveal threshold.

Independent Validation

scripts/validate_visibility_phase2_data_pack.py is read-only and imports neither the builder nor the Moira engine. From explicit local paths it:

Windows independent validation accepted the exact v3 pack. The same pack also loads through the engine with its pinned root manifest.

The end-to-end Venus smoke at JD 2451545.7291666665, latitude 0, longitude 0 returned:

status: evaluated
evidence_state: evaluated_clear_sky
target_true_altitude_deg: 30.953318182797634
solar_center_true_altitude_deg: -7.73651006224335
phase_angle_deg: 58.618037322862044
visibility_margin_magnitude: 7.126526684691916
component_receipt_count: 8
spectral_profile_id: payne_2026_venus_cie_response_v1
color_model_id: mallama_2017_ubvri_phase_color_v1
solver_relative_standard_error_multiplier: 1.0
visibility_margin_data_pack_envelope_lower_magnitude: 6.810345248615479
visibility_margin_data_pack_envelope_upper_magnitude: 7.455362567961965
visibility_margin_data_pack_envelope_maximum_deviation_magnitude: 0.32883588327004887
visibility_classification_within_data_pack_envelope: visible
error_budget_method_id: phase2_data_pack_declared_numerical_error_envelope_v1

Numerical-Error Propagation

The nominal Venus margin is unchanged. The added error-budget receipt closes the Phase 1 handoff that assigned limiting-magnitude propagation to Phase 2. It includes:

Modeled-twilight bounds perturb the twilight term only, hold the supplied dark-sky anchor nominal, and evaluate CIE MES2 plus the Crumey threshold at all four photopic/scotopic bound corners. The target bound combines the direct-extinction maximum interpolation and storage errors. The final receipt reports lower and upper limiting-magnitude and visibility-margin envelope limits and a visible, not_visible, or indeterminate classification within those data-pack numerical terms.

Measured-total backgrounds carry no fabricated pack-owned background error. Their input uncertainty is named as unquantified, and only the direct- extinction pack error is propagated. P95 interpolation values remain diagnostics rather than maximum bounds.

The solver term is not claimed as a hard maximum, and this is not a scientific-confidence interval. Dark-sky or measured-background input error, planetary photometry and spectral-source uncertainty, CIE and threshold model-form uncertainty, observer-population variance, and actual atmospheric variability remain explicitly unquantified.

Failure Containment

The Phase 2 tests cover:

No caller can relabel engine photometry or inject substitute planetary response weights.

The focused Phase 2 loader, compositor, target-profile, serialization, and error-envelope gate collected and passed 88 tests. The combined Phase 2 plus legacy visibility gate collected 585 tests, passed 584, and skipped the one pre-existing empty optional enumeration; nothing was deselected.

Legacy Regression Gate

Three incomplete fixture boundaries found during the checkpoint were repaired only at their resource boundaries:

The focused legacy gate collected 497 tests. It passed 496 and skipped one pre-existing empty optional enumeration. No failure was deselected. The gate covers legacy heliacal policy, planetary and fixed-star heliacal behavior, visibility physics, adversarial public behavior, validation corpora, and the existing server visibility route.

The apparent-magnitude reference suite also passes all 23 cases after the internal photometry-context refactor.

Phase 2 Exit Gate

Next Authorized Work

Phase 3, the physical visibility-event solver, is the next authorized phase. It must find physical visibility-margin crossings without changing any legacy event search or activating later facade/REST/native work.