✅ [Critical] HKDF 32-byte — output is now 96 bytes (SEED_BYTES) instead of 32. Fix: pouw_v2_keyder.h
✅ [Critical] GetRemainingSignatures underflow — guard leaf_index >= 1024 returns 0. Fix: xmss_keystore.h
✅ [Critical] Preimage v3 block 200 — code verified: nPoUWv3StartHeight=200 identical in mining.cpp and validation.cpp. No actual bug.
✅ [Critical] WOTS+ reuse wallet locked — wallet.cpp now rejects signing while the wallet is locked. Fix: wallet.cpp:2193-2194
✅ [Critical] sm_buf_size hardcoded — now computed dynamically from params.sig_bytes. Fix: xmss_state.h, xmss_bridge.cpp
✅ [High] Wrong FSL offset — seed extraction now reads SK_SEED+SK_PRF+PUB_SEED separately. Fix: mining.cpp:307-312
✅ [High] nPoUWMaxSigSize not enforced — size check added before Deserialize. Fix: validation.cpp
✅ [High] IsXMSSScript off-by-one — script.size() == 66 (not 65). Fix: xmss_signer.cpp:417
✅ [High] Weak signature check — added verification that the recovered message == original hash. Fix: xmss_bridge.cpp
✅ [High] Duplicate chain_id — regtest nXMSSChainId=4 (was 3, same as signet). Fix: chainparams.cpp
✅ [Medium] min_target underflow — clamped to 1 if the division result is 0. Fix: pow.cpp:101
✅ [Medium] Wrong comment in GetBlockSubsidy — "2,100,000 blocks (~4 years at 60s/block)". Fix: validation.cpp:1707