feat(diag): #266 - [stat-chain] apparatus across the vitae-to-movement chain

Three permanent low-volume probes: installed vitae record (id/type/key/
value) at ReplaceManifest, any vitae record dropped by GetMod's
spell-table prepass (retail's _vitae singleton never runs family
stacking - if this fires, hoist the Bucket-4 branch), and the full
recompute state (base skills, runMod, effective skills, active count).
One instrumented relog decides the break point.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-07-30 17:35:32 +02:00
parent 4880d7d9cf
commit f6e895c06c
3 changed files with 42 additions and 0 deletions

View file

@ -382,7 +382,21 @@ public sealed class Spellbook
_vitalModCache.Clear();
_skillModCache.Clear();
foreach (ActiveEnchantmentRecord enchantment in enchantments)
{
UpsertManifestEnchantment(enchantment);
// #266 apparatus (permanent, login-only volume): surface every
// installed VITAE record so the stat-chain break point is
// decidable from one log. Bucket 4 = vitae singleton class.
if (enchantment.Bucket == 4)
{
System.Console.WriteLine(
System.FormattableString.Invariant(
$"[stat-chain] login vitae installed: spell={enchantment.SpellId} "
+ $"statModType=0x{enchantment.StatModType ?? 0:X} "
+ $"key={enchantment.StatModKey ?? 0} "
+ $"value={(enchantment.StatModValue is float v ? v.ToString("F4") : "NULL")}"));
}
}
for (int i = 0; i < _favoriteSpells.Length; i++)
{