Hypno readiness: normal TM PP carryover
Read-only review of installed source and the explicit frozen notes/Void-Hypno-ready-status.json (saved758[28,106],14:03:11 Eastern). No controls, live battle data, runtime/native read or game/save changes.
Arcanine's new Safeguard is 8/25 PP, PP-Up0, not full PP. This is expected normal TM behavior. Installed Scripts/Items.rb:535–540 preserves the forgotten move's current PP in oldmovepp, constructs a new PBMove, then applies min(oldmovepp,newtotalPP) when bymachine is true. pbLearnMove receives true for machine teaching atItems.rb587. PBMove.rb:8–13 resets PP-Up0 and calculates Safeguard's compiled maximum25. The healed ExtremeSpeed slot had8PP (base5,3PPUps); teaching discarded its PPUps but retained its current8PP. Every other move in the frozen six is at its actual installed maximum. All six are fullHP/healthy.
Eight available Safeguards are sufficient for the reviewed short Arcanine Hypno plan. With correctly timed successful casts they cover up to40 enemy action turns; failed/early casts spend turns and must not be queued blindly. The intended XSpeed→wake ifneeded→Safeguard→twoXAttack→twoCrunch line normally uses one or two casts, with additional healing/SpDef actions counted publicly. Low PP is not the material tactical risk here: sleep/cure timing and critical DarkPulse after Hypno's CalmMind remain the existing reviewed risks. There is no need to spend an Ether merely to satisfy an inaccurate “all moves full” claim.
scripts/void_batch_route.py now has a final-Hypno-only hypno_prepared_pp() exception. It accepts the exact Arc90 slot/order Safeguard8/PP-Up0, Flamethrower/Crunch/MorningSun, checks the installed TM carryover expression and base PP, and requires every other move/member to be truly full. It does not change full_pp() or the strict LightShard verification. The final receipt/output explicitly says Safeguard8/25, not fullPP. No PP is written to the game or frozen evidence; the function's copied25 is only an arithmetic validation of the remaining moves. Tests rejected7/9SafeguardPP, PP-Up1, Lv89 and deficits in each other Arc move; the frozen input remains8.
Archive entry does not need an exception: major_enter.py calls major_attempt.py, whose ordinary preflight requires fresh native evidence, configured helditems/abilities/move slots/lead and optional fullHP. It does not demand maximumPP. prepare_major_append.py also has no maximumPP gate. The exact frozen status remains the truthful build/PP reference. Preserve8 in any battle ledger; do not label the six “fully restored PP” after TM teaching. Do not replay the completed Void route just to rerun its final verifier.