neon-sprawl/docs/decomposition/modules/E1_M4_AbilityInputScaffold.md

5.0 KiB

E1.M4 — AbilityInputScaffold

Summary

Field Value
Module ID E1.M4
Epic Epic 1 — Core Player Runtime
Stage target Prototype
Status In Progress (see dependency register)
Linear Story slugs E1M4-01 through E1M4-05 in E1M4 prototype backlog; label E1.M4 per decomposition README — Linear alignment

Purpose

Hotbar bindings, cooldown slot UI hooks, and the client/input path that issues AbilityCastRequest into E5.M1 — CombatRulesEngine, using targeting from E1.M3.

Responsibilities

  • Map hotbar slots to abilities and emit AbilityCastRequest with validation hints.
  • Surface HotbarLoadout and CooldownSnapshot for UI sync.

Key contracts

Contract Role
AbilityCastRequest Intent sent to combat resolution.
HotbarLoadout Bound abilities per slot.
CooldownSnapshot Client/server-visible cooldown state for UI.

Module dependencies

  • E1.M3 — InteractionAndTargetingLayer: target lock and cast validity.
  • E5.M1 — CombatRulesEngine: authoritative accept/deny of casts.

Dependents (by design)

  • Consumed by UX and telemetry; combat engine remains the authority.

Epic 1 Slice 3ability_cast_requested, ability_cast_denied with reason codes.

Implementation snapshot

  • Current state: NEO-29 landed prototype HotbarLoadout v1 contract and hydration path (GET/POST /game/players/{id}/hotbar-loadout, fixed 8 slots, deny reason codes). NEO-31 landed prototype POST /game/players/{id}/ability-cast plus client digit hotbar → cast payload wiring (target id from server-ack target state). NEO-28 extends that cast POST with server lock + registry + range validation (invalid_target, out_of_range) and a HUD cast feedback line on deny/accept. NEO-30 documents Epic 1 Slice 3 telemetry hook sites for ability_cast_requested / ability_cast_denied: comment markers + payload notes in AbilityCastApi.cs; client dev print / push_warning in main.gd and ability_cast_client.gd (all TODO(E9.M1) for cataloged ingest). NEO-32 landed CooldownSnapshot: GET /game/players/{id}/cooldown-snapshot (CooldownSnapshotResponse v1: serverTimeUtc, eight slots with optional cooldownEndsAtUtc), prototype global cooldown on successful accept, JSON deny on_cooldown, Godot cooldown_snapshot_client.gd + cooldown_state.gd + CooldownSlotsLabel HUD + client cast guard (main.gd); plan NEO-32, manual QA NEO-32.md.
  • Prototype persistence policy (NEO-29): per-player loadout key; Postgres when ConnectionStrings:NeonSprawl exists, in-memory fallback otherwise.
  • Prototype backlog: E1M4 prototype backlog defines five vertical slices from hotbar loadout contract to cast telemetry hooks.
  • Dependency expectation: first implementation stories assume E1.M3 target selection flow exists and E5.M1 provides minimum cast accept/deny contract.

Linear backlog

Parent epic: Epic 1 — Core Player Runtime.

Stories: full acceptance checklists in docs/plans/E1M4-prototype-backlog.md.

Slug Linear
E1M4-01 NEO-29HotbarLoadout v1 contract + baseline persistence path
E1M4-02 NEO-31 — Input to AbilityCastRequest path
E1M4-03 NEO-28 — Combat accept/deny integration + reason-code UX
E1M4-04 NEO-32CooldownSnapshot sync + slot presentation
E1M4-05 NEO-30 — Slice 3 telemetry hooks for cast funnel

Issues should carry label E1.M4 per Linear alignment.

Source anchors