Skip to content

Implement generic map/object triggers and authored action graphs #54

Description

@zoeyrose

Outcome

Cover repeated map-local and object behavior with bounded compiled action definitions, leaving bespoke mechanics as explicit reviewed Go handlers.

Scope and invariants

  • Define typed triggers for apply, enter/leave, message, timer, death, state change, portal, spawn, and other measured common events.
  • Define a small versioned action graph over approved typed commands: condition, sequence, choice, set state, spawn/despawn, transfer, message, quest/dialog handoff, and domain-service invocation.
  • Compile and statically validate references, cycles, permissions, required services, and CEL expressions; runtime never interprets legacy Python.
  • Execute through Implement the transactional gameplay event and action foundation #41 with deterministic order, captured identity, recursion/fan-out/step limits, cancellation, and atomic groups.
  • Provide source-aware diagnostics and structured tracing without exposing hidden state to players.

Acceptance criteria

  • A corpus-driven inventory proves each action/trigger exists because multiple behaviors need it; avoid an unbounded generic scripting language.
  • Fuzz/property tests cover cycles, recursion, stale entities, invalid references, partial failure, huge graphs, and event storms.
  • Sam's saw/activity and one map portal/puzzle run without custom script in M3.
  • Unsupported bespoke behavior receives a focused Go handler issue, not an unsafe reflection escape.
  • Editor/toolkit schemas and Go runtime pass the same positive/negative fixtures.

Dependencies and parallelization

Depends on #36, #41, #44, and #45. Toolkit schema/validation and editor authoring may proceed in parallel; Starlark #60 is evaluated only after this is exercised.

Independent implementation

Implement from the preserved issue-level/product behavior and independently authored fixtures. Do not copy or mechanically translate GPL server/Python code or tests. Replacement code is MIT; consumed content and assets keep their own licenses.

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