class_docstr: State transition logic
class_docstr_tok: ["State","transition","logic"]
code: def _move_hook(
      self, from_state: TestState, to_state: TestState
  ) -> None:
      change = (from_state, to_state)
      if change == (TestState.PASSING, TestState.CONSITENTLY_FAILING):
          self._create_github_issue()
      elif change == (TestState.FAILING, TestState.CONSITENTLY_FAILING):
          self._create_github_issue()
      elif change == (TestState.CONSITENTLY_FAILING, TestState.PASSING):
          self._close_github_issue()
      elif change == (TestState.PASSING, TestState.FAILING):
          self._trigger_bisect()
      elif change == (TestState.CONSITENTLY_FAILING, TestState.JAILED):
          self._jail_test()
      elif change == (TestState.JAILED, TestState.PASSING):
          self._close_github_issue()
  
file_path: ray/release/ray_release/test_automation/release_state_machine.py
imports: from datetime import datetime, timedelta
  from ray_release.test_automation.state_machine import TestStateMachine, DEFAULT_ISSUE_OWNER
  from ray_release.test import Test, TestState
  from ray_release.logger import logger
label_desc: Use image node_id 1 for calling the ReleaseTestStateMachine obj's underlying member method code with example usage: obj._move_hook(from_state, to_state) without return types