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.
Outcome
Replace runtime Python interface construction with native Go conversation state and structured, bounded presentation contracts.
Scope and invariants
Acceptance criteria
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.