Skip to content

Implement the native Go dialogue and interface engine #44

Description

@zoeyrose

Outcome

Replace runtime Python interface construction with native Go conversation state and structured, bounded presentation contracts.

Scope and invariants

  • Define stable conversation/topic/response IDs, speaker identity, entry/fallback resolution, session state, pagination, and cancellation.
  • Compile authored text and response structure; evaluate visibility/enablement through typed service facts or approved pure CEL.
  • Dispatch selected responses through typed gameplay commands with authorization, idempotency, and atomic effects.
  • Represent text, semantic emphasis, links/actions, portraits, and input prompts as a renderer-neutral protocol model with escaping/localization boundaries.
  • Bound text, choices, nesting, session lifetime, transitions, and response/action recursion; stale selections fail coherently.

Acceptance criteria

  • Tests cover branching, missing topics, disabled/hidden choices, stale/replayed selections, disconnect/reconnect, escaping, pagination, transaction failure, and content revision.
  • One NPC dialogue and quest handoff run in the M3 slice with zero Python/Starlark.
  • The 83 current interfaces are present in the migration manifest with an engine feature/data/handler owner.
  • The Rust client renders and automates the same structured model; no server HTML/legacy markup parser is required.
  • Malformed authored definitions are rejected before catalog publication with source diagnostics.

Dependencies and parallelization

Depends on #36, #41, #43 where quest actions intersect, and #45 for approved conditions. Client UI and editor panels proceed against golden models.

Independent implementation

New code and tests are MIT-licensed independent work. Preserve public behavior and issue-level design choices, but do not copy or mechanically translate GPL server/Python implementation or tests. Mixed-license content remains external data with its own notices.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    Status
    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions