V1 Web PWA · Journey

Journey: Nyx tonight observation

A source-reconciled journey record for V1 Web PWA — shipped behavior, state boundaries, failure modes, and the automation evidence available today.

automated · 5 specs verdict: partial· 2026-05-29
9sections5 minread

On this page
Journey at a glance
ActorsTonight visitorEvent browserObserverReturning member
Automation5 E2E spec(s) · verdict: partial· 2026-05-29

Journey flow#

Generated from the authored steps below — click a node to jump to that section.

flowchart TD s1["1. Inspect the live tonight card"] s2["2. Record the compact-room identifier defect"] s3["3. Use the working catalogue route"] s4["4. Save an observation"] s5["5. Verify projections and the Nisaba link"] s1 --> s2 --> s3 --> s4 --> s5 click s1 href "#1-inspect-the-live-tonight-card" click s2 href "#2-record-the-compact-room-identifier-defect" click s3 href "#3-use-the-working-catalogue-route" click s4 href "#4-save-an-observation" click s5 href "#5-verify-projections-and-the-nisaba-link" s5 --> v(["verdict: partial"]) click v href "../results/nyx-tonight-observation.html" style v stroke:#d6a531,color:#d6a531

Nyx has a live, location-aware tonight card and a real owner-scoped observation API, but the normal compact-room link between them is currently broken. The BFF tonight card emits ephemeris ids such as sunset, moonrise, moonset, and sunrise; the event-detail resolver only knows ids in the bundled web event catalogue. Clicking a normal /nyx row therefore reaches Event not found. The shipped successful route is /domains/nyx/events → catalog event detail → observation. This page records both the useful route and the broken primary route rather than allowing mocked E2E data to conceal the mismatch.

Personas#

  • Tonight visitor — checks live rise/set conditions in the compact Nyx room.
  • Event browser — chooses a known item from the domain event catalogue.
  • Observer — records a note, visibility assessment, and event association.
  • Returning member — expects their latest observation to appear in Nyx and home projections.

Pre-conditions#

  • Use an authenticated session for owner-scoped observation read-back.
  • Allow the BFF to resolve ephemeris/location input for /v1/nyx/tonight.
  • For a successful detail path, start at /domains/nyx/events; do not replace its catalogue id with sunset, moonrise, moonset, or sunrise.
  • Treat the compact sky diagram as illustrative. Its constellation-like line art and planet marker are not fully computed from the ephemeris payload.

Steps#

1. Inspect the live tonight card#

Visit /nyx. getNyx() requests /v1/nyx/tonight, and the BFF builds rows from current ephemeris data. An unavailable request produces an honest unavailable model. The moon and rise/set facts are useful live information; the decorative sky geometry and Auto-orient / compass chips are not an interactive sensor view.

2. Record the compact-room identifier defect#

Each NyxRoom row links to /domains/nyx/events/${row.id}. The emitted ids are not present in NYX_WEB_EVENT_RECORDS, so the destination currently renders data-nyx-event-detail-missing with Event not found. The named E2E can pass this transition only by mocking the tonight response with a catalogue id. That is valid component coverage, not proof that the production identifier join works.

3. Use the working catalogue route#

Open /domains/nyx/events, choose a listed event, and continue to its detail. This route uses the same bundled catalogue as the resolver, so the id is valid. Review the event copy, visibility guidance, calendar export, Tara relationship, and observation entry point while keeping their independent state seams clear.

4. Save an observation#

Submit the observation form. useNyxStore records local-first state and posts to /v1/nyx/observations. The BFF is owner scoped and persists through Postgres when configured or its supported file-snapshot fallback. The event id is retained, and the rendered record shows Linked event as a tag. The tag does not navigate back to event detail.

Reload Nyx or the relevant home rail and verify the saved observation projection for the same account. The event's canon link to /nisaba?origin=nyx&topic=night-sky is real navigation, but the compact Nisaba room ignores those query parameters and opens its generic curated desk. It is not a topic-resolved scholarly handoff.

Post-conditions#

  • Live ephemeris facts are distinguished from the static event catalogue and illustrative sky art.
  • A successful observation has owner-scoped BFF read-back, with local-first state reported separately if the network write fails.
  • The compact-room id mismatch is preserved as an explicit product defect.
  • The Nisaba destination is described as generic navigation, not as a resolved night-sky source chain.

Failure modes#

  • Tonight row 404-equivalent — an ephemeris id reaches the event resolver and produces Event not found.
  • BFF unavailable — the compact room uses the explicit unavailable state.
  • Chart overclaim — hard-coded geometry or static compass chips are presented as live, oriented sensor output.
  • Observation divergence — local state exists while the owner-scoped BFF write failed; a reload on another device will not prove persistence.
  • Broken association affordanceLinked event looks actionable but is a non-link tag.
  • Generic scholar destination — Nisaba receives query parameters it does not consume.

E2E coverage#

Per-view files touched#

Cross-references#

Open questions#

  • Should ephemeris rows resolve to generated detail models, or link somewhere other than the static event catalogue?
  • Can a contract test require every /v1/nyx/tonight id to resolve through the web detail resolver?
  • Which sky visualization elements should be driven by actual azimuth, altitude, time, and device orientation?
  • Should observation associations be navigable in both directions?
  • Should Nisaba consume origin and topic, or should Nyx link to a concrete passage/search route?