diff --git a/SVSim.BattleNode/Lifecycle/BattleFrameDefaults.cs b/SVSim.BattleNode/Lifecycle/BattleFrameDefaults.cs
index ca937bf..88f8f05 100644
--- a/SVSim.BattleNode/Lifecycle/BattleFrameDefaults.cs
+++ b/SVSim.BattleNode/Lifecycle/BattleFrameDefaults.cs
@@ -4,24 +4,20 @@ namespace SVSim.BattleNode.Lifecycle;
/// Default frame constants templated from TK2 prod captures, shared by the
/// server-authored battle-frame builders. Every value here originated in a real prod
/// frame in data_dumps/captures/battle-traffic_tk2_regular.ndjson; pulling them
-/// out of makes the magic numerics navigable and gives
-/// the seed a single source of truth instead of two duplicated literals.
+/// out of makes the magic numerics navigable. The shared effect
+/// seed and the deck-shuffle/idxChangeSeed are now derived per-battle from a master seed (see
+/// ) — only animation/UI constants remain here.
///
internal static class BattleFrameDefaults
{
- // Shared per the spec — selfInfo.seed and oppoInfo.seed always agree.
- // From frame[2] (Matched).
- public const long BattleSeed = 17_548_138L;
-
// From frame[5] (BattleStart). Hardcoded; see spec §Deferred plumbing — sourcing these
// from real per-viewer state needs a TK2 rank/battle-point tracker.
public const string PlayerRank = "10";
public const string PlayerBattlePoint = "6270";
- // From frame[8] (Ready). Provenance is "what prod sent"; the client
- // doesn't validate, but echoing matches the capture protects against
- // a regression on a future tightening.
- public const int ReadyIdxChangeSeed = 771_335_280;
+ // From frame[8] (Ready). Provenance is "what prod sent"; the client doesn't validate. This is
+ // an animation crank value (shared-RNG spin), NOT gameplay randomness — both clients crank it
+ // identically and stay synced, so it stays a constant. See the spin-rng audit.
public const int ReadySpin = 243;
///