fix(skills): let a permanently-slotted skill pass preflight without a hotkey

validate_build_skill_icons rejected any required check with a blank hotkey before
the icon was ever looked at, so moving Blessed Hammer to its real home (left slot,
no key) traded one false failure for another. SkillCheck gains a `permanent` flag
for skills that sit on a slot with no hotkey selecting them; the guard skips those
and the icon check inspects the slot as-is.

Preflight now passes clean: blessed_hammer 100% (left), concentration 86.5%,
redemption 92.0%, holy_shield 93.0%, teleport 92.4%.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
alexpolo1
2026-09-04 12:26:03 +02:00
co-authored by Claude Opus 5
parent 4c915f17ac
commit 0faa31f3d8
+6 -2
View File
@@ -17,6 +17,10 @@ class SkillCheck:
template: str
side: str
required: bool
# True when the skill sits permanently on its slot and no hotkey selects it
# (Blessed Hammer on left-click). Such a check inspects the slot as-is, so a
# blank hotkey is correct rather than a misconfiguration.
permanent: bool = False
SORC_TEMPLATE_ALIASES = {
@@ -67,7 +71,7 @@ def get_build_skill_checks(config_instance: Config, char_type: str | None = None
# the hammer sat correctly on the left the whole time. Verify the left slot,
# and ignore any configured hotkey for it.
checks.append(SkillCheck(char_type, "blessed_hammer", "",
"BLESSED_HAMMER", "left", True))
"BLESSED_HAMMER", "left", True, permanent=True))
checks.append(SkillCheck(char_type, "concentration",
_configured_hotkey(build_cfg, "concentration"),
"CONCENTRATION", "right", True))
@@ -163,7 +167,7 @@ def validate_build_skill_icons(config_instance: Config, char_type: str | None =
errors = []
for check in checks:
if not check.hotkey:
if not check.hotkey and not check.permanent:
if check.required:
errors.append(f"{check.skill} has no configured hotkey")
continue