Status: implemented and verified on 2026-07-22.
Product boundary#
Nyx is a V1-owned house channel projected into the V10 Rail as v1.nyx. The
Rail owns delivery policy; Nyx owns astronomical computation and forecast truth.
The channel manifest therefore declares tiles, drips, optional media, and
daypart affinity without priority, interruption, or elevation controls.
The surface follows one visual thesis: an observatory glance line rather than a celestial dashboard. The next visible event and its time dominate; source and coarse location context remain supporting detail. There is no autoplay motion.
Real sources#
NyxRailEphemerisAdaptersamples the real@nyx/ephemerisengine across the requested night. It emits the Moon's computed above-horizon culmination and only genuinely close (three degrees or less), simultaneously visible planet conjunctions. It does not label ordinary planet visibility as a conjunction.NyxSkyClockBriefingSourcepasses those events through@nyx/sky-clock's materialiser. That boundary validates the observer, filters below-horizon events, assigns visibility rank, and caches exactly one briefing per one-degree location bucket and local night.NyxNoaaAuroraForecastSourceuses the existing@nyx/eventsNOAA SWPC client and Nyx geomagnetic visibility forecaster. A forecast becomes a drip candidate only when its period overlaps the requested night and its Kp value can plausibly reach the observer's geomagnetic latitude. Missing, failed, out-of-window, or locally implausible data never becomes a fabricated alert.createNyxSkyCamSourceaccepts an explicit provider and source reference and can add that feed to the channel's video lane only asdocked-third-party. The production directory currently declares no camera, because no verified feed is configured in this deployment.
Contract and privacy properties#
- The tile exposes only the sky-clock's one-degree location bucket, never the observer's precise latitude or longitude.
- Source outputs are parsed strictly, event ids must be unique, events must be chronological, and timestamps require explicit offsets.
- Drip reads are bounded to 48 hours and emit only
nyx.sky-eventornyx.aurora; their payloads contain no channel-controlled delivery fields. - The manifest declares
punishesAbsence: false, no micro-act, no live-moment elevation, and strongest affinity (1) forwind-down. - Desktop, browser, mobile, watch, and TV receive the text-first tile. Optional camera playback remains a larger-surface lane concern.
Verification evidence#
- Nyx channel: typecheck and lint pass; 11/11 focused tests pass, including real ephemeris calculations, sky-clock materialisation/caching, NOAA forecast adaptation, low-latitude suppression, strict source failure, privacy, drip bounds, text truncation, absence semantics, and optional camera classification.
- Nyx sky-clock substrate: its Nx project metadata now truthfully declares
type:lib; its own test and lint targets pass. - Cross-channel invariants: Nyx joins the post-pilot invariant manifest set without being reclassified as a Phase A pilot. Phase A typecheck/lint and all 29/29 tests pass, including no-absence-punishment, no-autoplay, elevation budget, surface, consolidation, and adult-ring gates.
- V10 web: typecheck and lint pass; 166/166 unit/component tests pass.
- Playwright production directory: 4/4 pass across desktop and mobile Chromium, including the visible Nyx entry and horizontal-overflow guard.
- The workspace lockfile validates in frozen offline mode for the affected package filters.
This adapter is the Nyx content authority required by the morning Thread. Tara and Arete remain separate X-4 adapter tasks before X-3 can honestly compose all house-channel content.