# Algorand Specifications

When a player observes that a new period (r,p) has begun, the player sets

- s¯:=s,
- s:=0.

Also, the player sets v¯:=v if the player has observed Bundle(r,p−1,s,v) given some values s>cert (or s=soft), v≠⊥;
if none exist, the player sets v¯:=σ(S,r,p−i) if it exists,
where p−i was the player’s period immediately before observing the new period;
and if none exist, the player does not update v¯.

In other words, if Bundle(r,p−1,s,v)∈V′ for some v≠⊥,s>cert or s=soft, then

N((r,p−i,s,s¯,V,P,v¯),L,…)=((r,p,0,s,V′,P,v),L′,…);
N((r,p−i,s,s¯,V,P,v¯),L,…)=((r,p,0,s,V′,P,v),L′,…);

and otherwise, if Bundle(r,p−1,s,⊥)∈V′ for some s>cert
with σ(S,r,p−i) defined, then

N((r,p−i,s,s¯,V,P,v¯),L,…)=((r,p,0,s,V′,P,σ(S,r,p−i)),L′,…);
N((r,p−i,s,s¯,V,P,v¯),L,…)=((r,p,0,s,V′,P,σ(S,r,p−i)),L′,…);

and otherwise

N((r,p−i,s,s¯,V,P,v¯),L,…)=((r,p,0,s,V′,P,v¯),L′,…);
N((r,p−i,s,s¯,V,P,v¯),L,…)=((r,p,0,s,V′,P,v¯),L′,…);

for some i>0 (where S=(r,p−i,s,s¯,V,P,v¯)).

> Important
>
> **IMPLEMENTATION:**
>
> New period [reference implementation](https://github.com/algorand/go-algorand/blob/b6e5bcadf0ad3861d4805c51cbf3f695c38a93b7/agreement/player.go#L411).
