Implement CooldownMiddleware with per-player action tracking #108

Open
opened 2026-03-15 04:13:17 +00:00 by freemo · 0 comments
Owner

Metadata

  • Commit Message: feat(dispatch): add cooldown middleware
  • Branch: feature/m1-middleware-pipeline

Background and Context

CooldownMiddleware (priority 40) prevents players from executing the same action too
frequently. Actions declare a cooldown period via the metadata DSL. The middleware
tracks last execution time per player per action class.

Expected Behavior

  • Reads action.class.cooldown (seconds) from action metadata
  • Tracks {player_goid, action_class} => last_used_at in a thread-safe map
  • Halts if cooldown has not elapsed, reporting remaining time to player

Acceptance Criteria

  • CooldownMiddleware at priority 40
  • Per-player, per-action cooldown tracking
  • Thread-safe storage (Concurrent::Map)
  • Remaining time reported to player
  • BDD scenarios

Subtasks

  • Implement CooldownMiddleware with Concurrent::Map tracking
  • Add cooldown check and remaining time calculation
  • Write Cucumber scenarios

Definition of Done

This issue is complete when:

  • All subtasks above are completed and checked off.
  • A Git commit is created where the first line of the commit message matches the
    Commit Message in Metadata exactly.
  • The commit is pushed to the remote on the branch matching the Branch in Metadata.
  • The commit is submitted as a pull request to master, reviewed, and merged.
## Metadata - **Commit Message**: `feat(dispatch): add cooldown middleware` - **Branch**: `feature/m1-middleware-pipeline` ## Background and Context CooldownMiddleware (priority 40) prevents players from executing the same action too frequently. Actions declare a cooldown period via the metadata DSL. The middleware tracks last execution time per player per action class. ## Expected Behavior - Reads `action.class.cooldown` (seconds) from action metadata - Tracks `{player_goid, action_class} => last_used_at` in a thread-safe map - Halts if cooldown has not elapsed, reporting remaining time to player ## Acceptance Criteria - CooldownMiddleware at priority 40 - Per-player, per-action cooldown tracking - Thread-safe storage (Concurrent::Map) - Remaining time reported to player - BDD scenarios ## Subtasks - [ ] Implement CooldownMiddleware with Concurrent::Map tracking - [ ] Add cooldown check and remaining time calculation - [ ] Write Cucumber scenarios ## Definition of Done This issue is complete when: - All subtasks above are completed and checked off. - A Git commit is created where the **first line** of the commit message matches the Commit Message in Metadata exactly. - The commit is pushed to the remote on the branch matching the **Branch** in Metadata. - The commit is submitted as a **pull request** to `master`, reviewed, and **merged**.
freemo added this to the (deleted) milestone 2026-03-15 04:13:17 +00:00
freemo self-assigned this 2026-03-15 04:25:24 +00:00
freemo modified the milestone from (deleted) to v1.0.0 2026-03-16 00:28:04 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference: aethyr/Aethyr#108
No description provided.