Event-Driven Architecture: Wisper Expansion & Legacy Sunset #171
Labels
No labels
Blocked
Duplicate
MoSCoW/Could Have
MoSCoW/Must Have
MoSCoW/Should Have
Points/1
Points/13
Points/2
Points/21
Points/3
Points/5
Points/8
Priority/Backlog
Priority/Critical
Priority/High
Priority/Low
Priority/Medium
State/Completed
State/In progress
State/In review
State/Paused
State/Unverified
State/Verified
State/Wont Do
Type/Bug
Type/Epic
Type/Feature
Type/Legendary
Type/Task
Type/Testing
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Depends on
#172 Epic: Core Domain Event Definitions
aethyr/Aethyr
#178 Epic: Sunset Legacy out_event() Pattern
aethyr/Aethyr
#182 Epic: Sunset Legacy room.output() Pattern
aethyr/Aethyr
#190 Epic: Sunset Legacy .alert() Pattern
aethyr/Aethyr
#192 Epic: EventHandler Deprecation and Removal
aethyr/Aethyr
Reference: aethyr/Aethyr#171
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Background and Context
Aethyr's
Publisherbase class includes Wisper pub/sub, but only 3 events are currently published in the entire codebase::player_input,:object_added, and:pre_look. The specification defines 30+ domain events that should be published from game systems, and a reactive event-subscription architecture where the UI, NPC reactions, logging, and other cross-cutting concerns subscribe to events rather than being called directly.The current codebase has four legacy direct-call patterns that predate Wisper:
player.output(message)— 111+ call sites sending text directly to player connectionsroom.out_event(event_hash)— 23 call sites distributing event hashes through room inventoriesroom.output(message)— 5 call sites broadcasting text through Container iteration.alert(event)— 5 call sites dispatchingEventobjects via direct method callsAdditionally, the reflection-based
EventHandler(Module.const_get(event.type).send(event.action, ...)) is retained only for combat delayed events and NPC reaction sequences, and is scheduled for removal.Articulated End State
Every significant state change in the game publishes a Wisper domain event. All four legacy direct-call patterns are eliminated. The
EventHandleris removed. Game logic has zero awareness of its observers. Cross-cutting concerns subscribe to the events they care about. The codebase follows past-tense event naming per the Wisper guidelines in CONTRIBUTING.md.Child Epics
out_event()Patternroom.output()Patternplayer.output()Pattern.alert()Pattern