Skip to content

feat(ui): build an actionable quest journal and objective tracker #55

Description

@zoeyrose

Parent: atrinik/atrinik#371

Refines #34. Depends on protocol#8, server#43, and the parent's server projection child.

Outcome

Build a dedicated, accessible quest journal and optional current-objective tracker on the Rust client's immutable structured quest view.

The UI must make actionable state obvious without parsing quest prose or reconstructing server rules. It replaces neither the server's authority nor ordinary books/readables.

Journal experience

  • Separate active, ready-to-turn-in, completed, and failed quests/objectives with clear text/icon states.
  • Show quest hierarchy, objective progress, required/optional/alternative relationships, issuer, action target, turn-in target, and disclosed region/landmark.
  • Prioritize actionable objectives while preserving all simultaneously valid alternatives.
  • Retain selection, expanded rows, filters, and scroll position by stable ID across ordinary updates where the referenced state remains valid.
  • Provide useful empty, loading, unavailable, incompatible-revision, and resync states rather than showing stale data as current.

Tracking and markers

  • Let the player pin, unpin, and switch a tracked objective through semantic actions.
  • Define a deterministic fallback when a tracked objective completes, fails, becomes hidden, or is removed by a compatible content revision. Do not silently switch between moral/alternative branches in a way that implies player choice.
  • The compact HUD tracker shows the objective state, concise authored current/ready guidance, progress, and disclosed destination.
  • Show map/world markers only from typed authorized marker anchors supplied by the authoritative projection. Missing anchors produce text guidance, not client-invented coordinates or routes.
  • Marker, journal row, and tracker status use shape/icon/text plus color and share stable accessible names.

Session model and trust boundary

  • Decode GP1 messages into bounded temporary data, validate the full snapshot/revision, then atomically commit an immutable session view.
  • Reject malformed nesting, duplicate IDs, invalid relationships/enums, oversized collections/strings, impossible progress, stale revisions, and incomplete pages without damaging the prior valid view.
  • Clear or explicitly resync quest state on logout, character change, reconnect generation reset, and incompatible content/protocol revision.
  • Dispatch only semantic journal/tracking actions. UI code imports neither transport messages nor server/content internals.

Acceptance criteria

  • Q/the configured semantic action and the HUD/menu affordance open a dedicated journal; ordinary books and help pages remain unchanged.
  • Keyboard, mouse, and ordinary controller navigation have visible focus, predictable back/close behavior, and no focus traps.
  • UI scaling, long wrapped Unicode text, large journals, deep bounded hierarchy, and narrow/windowed layouts remain readable without clipping actionable state.
  • Active, ready-to-turn-in, completed, failed, optional, and alternative objectives are distinguishable without color alone.
  • A ready item objective names the turn-in NPC/location when disclosed and remains selected after a valid refresh/reconnect.
  • Multiple valid objectives can be inspected and tracked without the UI declaring unselected alternatives failed or obsolete.
  • Pin/unpin/fallback behavior is deterministic and covered when an objective completes, fails, hides, disappears, or changes revision.
  • Authorized marker anchors appear consistently in journal, tracker, and map presentation; hidden or absent anchors leak no inferred location.
  • Empty, loading, stale, malformed, oversized, partial, and incompatible-revision inputs preserve the last valid model or show an explicit safe unavailable state.
  • Headless model/geometry/accessibility tests and supported Linux/Windows UI paths cover the cases above.
  • The first-playable quest slice and Lost Memories queen-head fixture can be followed to the next NPC without external instructions.

Native sub-issue

  • #29 supplies structured quest issuer identity/location and should be completed as part of this experience.

Coordinate prompt/action naming with #14, but do not absorb the broader onboarding curriculum.

Validation

Run tools/validate.sh and git diff --check, shared GP1 fixtures, headless UI-model tests, supported Linux/Windows integration paths, and the wrapper first-playable scenario when available.

Non-goals

  • Client-side quest progression, readiness calculation, or prose parsing.
  • Automatic pathfinding or disclosure of hidden objectives/coordinates.
  • Rebuilding the generic book reader as the quest journal.
  • Reusing Classic UI source/tests without complete-history evidence that every contribution and embedded material is covered by compatible recorded rights.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Fields

    No fields configured for Initiative.

    Projects

    Status
    Inbox

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions