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.CONSITENTLY_FAILING, TestState.FLAKY):
          self._comment_github_issue(FAILING_TO_FLAKY_MESSAGE)
      elif change == (TestState.PASSING, TestState.FLAKY):
          self._create_github_issue()
      elif change == (TestState.FLAKY, TestState.PASSING):
          self._close_github_issue()
      elif change == (TestState.FLAKY, TestState.JAILED):
          self._comment_github_issue(JAILED_MESSAGE)
  
file_path: ray/release/ray_release/test_automation/ci_state_machine.py
imports: from ray_release.test_automation.state_machine import TestStateMachine, DEFAULT_ISSUE_OWNER
  from ray_release.test import Test, TestState
label_desc: Use image node_id 2 for calling the CITestStateMachine obj's underlying member method code with example usage: obj._move_hook(from_state, to_state) without return types