Program: 157751
Project: 157751
Buggy source:
/** 
 * Not sure if it's triggered by just casting Angel's Grace or by casting it from an Isochron Scepter, but when the bug happens neither player is able to play spells or activate abilities anymore for the rest of the game. Maybe something related to Split Second?
 */
@Test public void testAngelsGrace(){
  addCard(Zone.BATTLEFIELD,playerA,"String_Node_Str",4);
  addCard(Zone.HAND,playerA,"String_Node_Str");
  addCard(Zone.HAND,playerA,"String_Node_Str");
  addCard(Zone.BATTLEFIELD,playerB,"String_Node_Str",4);
  addCard(Zone.HAND,playerB,"String_Node_Str",2);
  addCard(Zone.BATTLEFIELD,playerB,"String_Node_Str",2);
  castSpell(1,PhaseStep.PRECOMBAT_MAIN,playerA,"String_Node_Str");
  addTarget(playerA,"String_Node_Str");
  attack(2,playerB,"String_Node_Str");
  attack(2,playerB,"String_Node_Str");
  attack(2,playerB,"String_Node_Str");
  attack(2,playerB,"String_Node_Str");
  activateAbility(2,PhaseStep.DECLARE_BLOCKERS,playerA,"String_Node_Str");
  setChoice(playerA,"String_Node_Str");
  setChoice(playerA,"String_Node_Str");
  castSpell(2,PhaseStep.POSTCOMBAT_MAIN,playerB,"String_Node_Str",playerA);
  castSpell(3,PhaseStep.PRECOMBAT_MAIN,playerB,"String_Node_Str","String_Node_Str");
  setStopAt(3,PhaseStep.BEGIN_COMBAT);
  execute();
  assertExileCount("String_Node_Str",1);
  assertGraveyardCount(playerA,"String_Node_Str",0);
  assertLife(playerA,1);
  assertLife(playerB,20);
  assertGraveyardCount(playerB,"String_Node_Str",2);
  assertGraveyardCount(playerB,"String_Node_Str",1);
  assertPermanentCount(playerB,"String_Node_Str",3);
  assertPermanentCount(playerA,"String_Node_Str",1);
}

Fixed version (ground truth):
/** 
 * Not sure if it's triggered by just casting Angel's Grace or by casting it from an Isochron Scepter, but when the bug happens neither player is able to play spells or activate abilities anymore for the rest of the game. Maybe something related to Split Second?
 */
@Test public void testAngelsGrace(){
  addCard(Zone.BATTLEFIELD,playerA,"String_Node_Str",4);
  addCard(Zone.HAND,playerA,"String_Node_Str");
  addCard(Zone.HAND,playerA,"String_Node_Str");
  addCard(Zone.BATTLEFIELD,playerB,"String_Node_Str",4);
  addCard(Zone.HAND,playerB,"String_Node_Str",2);
  addCard(Zone.BATTLEFIELD,playerB,"String_Node_Str",2);
  castSpell(1,PhaseStep.PRECOMBAT_MAIN,playerA,"String_Node_Str");
  addTarget(playerA,"String_Node_Str");
  attack(2,playerB,"String_Node_Str");
  attack(2,playerB,"String_Node_Str");
  attack(2,playerB,"String_Node_Str");
  attack(2,playerB,"String_Node_Str");
  activateAbility(2,PhaseStep.DECLARE_BLOCKERS,playerA,"String_Node_Str");
  setChoice(playerA,"String_Node_Str");
  setChoice(playerA,"String_Node_Str");
  castSpell(2,PhaseStep.POSTCOMBAT_MAIN,playerB,"String_Node_Str",playerA);
  castSpell(3,PhaseStep.PRECOMBAT_MAIN,playerB,"String_Node_Str","String_Node_Str");
  setStopAt(3,PhaseStep.BEGIN_COMBAT);
  execute();
  assertLife(playerA,1);
  assertLife(playerB,20);
  assertGraveyardCount(playerB,"String_Node_Str",2);
  assertGraveyardCount(playerB,"String_Node_Str",1);
  assertPermanentCount(playerB,"String_Node_Str",3);
  assertPermanentCount(playerA,"String_Node_Str",1);
  assertExileCount("String_Node_Str",1);
  assertGraveyardCount(playerA,"String_Node_Str",0);
}