I figured it out and fixed it! :D
It's because of SpellManager.addSpell.
Line 102 of SpellManager uses .getChild rather than .createChild which means that the spell level isn't created (not entirely sure why this works at all, honestly).
While this should probably be changed upstream in 3.5E, a fix for your extension is to add this right before addSpellToActionList in char_invlist_ACIM.lua:
and then to change this line in addSpellToActionList:Code:local function addSpell(nodeSource, nodeSpellClass, nLevel)
-- Validate
if not nodeSource or not nodeSpellClass or not nLevel then
return nil;
end
-- Create the new spell entry
local nodeTargetLevelSpells = nodeSpellClass.createChild("levels.level" .. nLevel .. ".spells");
if not nodeTargetLevelSpells then
return nil;
end
local nodeNewSpell = nodeTargetLevelSpells.createChild();
if not nodeNewSpell then
return nil;
end
-- Copy the spell details over
DB.copyNode(nodeSource, nodeNewSpell);
-- Convert the description field from module data
SpellManager.convertSpellDescToString(nodeNewSpell);
local nodeParent = nodeTargetLevelSpells.getParent();
if nodeParent then
-- Set the default cost for points casters
local nCost = tonumber(string.sub(nodeParent.getName(), -1)) or 0;
if nCost > 0 then
nCost = ((nCost - 1) * 2) + 1;
end
DB.setValue(nodeNewSpell, "cost", "number", nCost);
-- If spell level not visible, then make it so.
local sAvailablePath = "....available" .. nodeParent.getName();
local nAvailable = DB.getValue(nodeTargetLevelSpells, sAvailablePath, 1);
if nAvailable <= 0 then
DB.setValue(nodeTargetLevelSpells, sAvailablePath, "number", 1);
end
end
-- Parse spell details to create actions
if DB.getChildCount(nodeNewSpell, "actions") == 0 then
SpellManager.parseSpell(nodeNewSpell);
end
return nodeNewSpell;
end
to be:Code:local nodeNew = SpellManager.addSpell(nodeSpell, nodeNewSpellClass, nSpellLevel);
Code:local nodeNew = addSpell(nodeSpell, nodeNewSpellClass, nSpellLevel);

