Can someone tell me where I’ve gone wrong with this plugin’s Settings page?

So having another look at this again today it occurred to me that it definitely must be an issue with settings_opts_page. In the light of a new day the answer is obvious, clearly settings_fields and do_settings_sections are intended to echo their contents and this is breaking the page render and seeing the form and contents displaced.

public function settings_opts_page(){
 echo '<div id="rifh-tester-setup"><form action="options.php" method="post">
  ' . settings_fields("rifh_tester_options") . do_settings_sections("rifh_tester") . '
  <input name="submit" type="submit" value="Save Changes">
  </form>
  </div>';
}

Should be

public function settings_opts_page(){
 echo '<div id="rifh-tester-setup"><form action="options.php" method="post">';
 settings_fields("rifh_tester_options");
 do_settings_sections("rifh_tester");
 echo '<input name="submit" type="submit" value="Save Changes"></form></div>';
}