Add skill data for passive tree Grants Skill nodes#51
Conversation
Add Gems.lua entries for 8 Djinn command sub-skills (Navira's Fracturing, Navira's Well, Navira's Oasis, Ruzhan's Trap, Ruzhan's Reckoning, Ruzhan's Fury, Kelari's Deception, Kelari's Judgment) so they resolve in gemIdLookup and the ExtraSkill mod is correctly emitted. Add ModParser patterns for "Grants Sands of Time" and "Grants Thaumaturgical Dynamism" display-only buff text so they no longer appear as unknown stats. Update ModCache entries to reflect the resolved skill IDs.
077f19d to
1dc65bc
Compare
Code Review — Complete ✓Reviewed and rebased onto current FindingsAll code is correct. No bugs found.
StatusReady for testing. No code changes were needed — just rebased. Test plan in PR description covers the right cases. |
|
Now I have enough context to write a thorough review. Code Review1. Calculation CorrectnessNo changes touch 2. Modifier Parsing — ModParser.lua:3491–3492["grants sands of time"] = { },
["grants thaumaturgical dynamism"] = { },These are inserted into if type(specialMod) == "function" then
return specialMod(tonumber(cap[1]), unpack(cap))
else
return copyTable(specialMod) -- returns {} for these entries
end
FAIL — Missing tests. CLAUDE.md rule #2 is unambiguous:
3. Nil SafetyNo new unguarded table accesses. 4. Data Integrity
BUG — Missing -- Kelari's Deception (Gems.lua, new entry)
tags = {
grants_active_skill = true,
spell = true,
area = true, -- no physical = true
},
tagString = "AoE", -- no Physical
-- Kelari's Judgment (Gems.lua, new entry)
tags = {
grants_active_skill = true,
spell = true,
area = true, -- no physical = true
},
tagString = "AoE", -- no Physical
5. PerformanceNo allocations inside any hot loop. All changes are to startup-time data tables and the 6. Test Coverage
7. StyleAll new Summary of Issues
REQUEST_CHANGES — The missing |
/fix |
|
Now I have everything I need. Here is the full review. Code Review1. Calculation CorrectnessNo changes touch The
All eight pairs are internally self-consistent. No issues. 2. Modifier Parsing — BLOCKING
Two new entries were added at ["grants sands of time"] = { },
["grants thaumaturgical dynamism"] = { },No test cases were added. The spec file has no coverage for The minimum expected test shape (matching the existing pattern in Secondary concern — pattern placement. The two new entries are inserted between two related patterns: ["grants skill: (%D+)"] = function(_, skill) return grantedExtraSkill(skill, 1) end,
["grants sands of time"] = { }, -- inserted here
["grants thaumaturgical dynamism"] = { },
["grants skill: level (%d+) (.+)"] = function(...)In Lua 5.1, 3. Nil Safety
-- before
c["Grants Sands of Time"]={nil,"Grants Sands of Time "}
-- after
c["Grants Sands of Time"]={{},nil}This is correct. The The new 4. Data IntegrityKey vs. Tag concern —
These are not blocking if these skills truly deal no player-relevant damage (i.e., they are djinn abilities that PoB does not model in the stat calculation), but they should be explicitly confirmed.
5. PerformanceAll new allocations are in module-load-time data tables ( 6. Test Coverage
The two 7. Style
REQUEST_CHANGES — Missing test cases for both new |
Summary
gemIdLookupand produce correctExtraSkillmods when their passive tree nodes are allocatedCloses #39
Details
The existing pipeline for
Grants Skill: Xpassive tree nodes was already complete:grantedExtraSkill()grantedExtraSkill()looks up the skill name ingemIdLookupmod("ExtraSkill", "LIST", { skillId = ..., level = 1 })The issue was purely data-layer: 8 Djinn command skills existed in
Skills/minion.lua(loaded intodata.skills) but had no corresponding entries inGems.lua, so they never appeared ingemIdLookup. Adding the gem entries completes the mapping.For "Grants Sands of Time" and "Grants Thaumaturgical Dynamism", these are display-only stat description text (not actual skill grants). They now match as known no-op patterns instead of being flagged as unknown.
Test plan