Bug Report: Board is set to latest move while in analyze mode

Description: When in Analyze Mode the board ‘refreshes’ after ~50 seconds (hand stopped 48.28). The board jumps to the last position and all the entered branches are deleted. This renders the analyze mode virtually unusable

Steps to reproduce:

  1. Go to the game (e.g. https://online-go.com/game/8564909)
  2. go to analyze mode
  3. go back some moves (e.g go to move 180)
  4. wait some time
  5. see the board jumping to the last position

expected behaviour:
the board should not be refreshed. entered moves/branches should no be removed. the board should not jump to the last position in the game.

Affected System:
iOS 10.3.2 with latest chrome, firefox, safari
windows 10 with latest chrome, edge, firefox

Log from Chrome/Windows
sockets.ts:36 Connection to server established
sockets.ts:41 Termination server: Object {hostname: “ogs-termserver-1525607765-mft2t”, clients: 356, uptime: 105085.331}clients: 356hostname: "ogs-termserver-1525607765-mft2t"uptime: 105085.331__proto__: Objectconstructor: function Object()arguments: nullassign: function assign()arguments: nullcaller: nulllength: 2name: "assign"proto: function ()apply: function apply()arguments: nullcaller: nulllength: 2name: "apply"proto: function ()apply: function apply()arguments: nullcaller: nulllength: 2name: "apply"proto: function ()apply: function apply()arguments: (…)bind: function bind()arguments: nullcaller: nulllength: 1name: "bind"proto: function ()apply: function apply()arguments: nullcaller: nulllength: 2name: "apply"proto: function ()apply: function apply()arguments: (…)bind: function bind()call: function call()caller: (…)constructor: function Function()length: 0name: ""toString: function toString()Symbol(Symbol.hasInstance): function Symbol.hasInstanceget arguments: function ThrowTypeError()set arguments: function ThrowTypeError()get caller: function ThrowTypeError()set caller: function ThrowTypeError()proto: Object[[FunctionLocation]]: arguments: (…)bind: function bind()call: function call()caller: (…)constructor: function Function()length: 0name: ""toString: function toString()Symbol(Symbol.hasInstance): function Symbol.hasInstanceget arguments: function ThrowTypeError()set arguments: function ThrowTypeError()get caller: function ThrowTypeError()set caller: function ThrowTypeError()proto: Object[[FunctionLocation]]: call: function call()caller: (…)constructor: function Function()length: 0name: ""toString: function toString()Symbol(Symbol.hasInstance): function Symbol.hasInstanceget arguments: function ThrowTypeError()set arguments: function ThrowTypeError()get caller: function ThrowTypeError()set caller: function ThrowTypeError()proto: Object[[FunctionLocation]]: arguments: (…)bind: function bind()call: function call()caller: (…)constructor: function Function()length: 0name: ""toString: function toString()Symbol(Symbol.hasInstance): function Symbol.hasInstanceget arguments: function ThrowTypeError()set arguments: function ThrowTypeError()get caller: function ThrowTypeError()set caller: function ThrowTypeError()proto: Object[[FunctionLocation]]: arguments: (…)bind: function bind()call: function call()caller: (…)constructor: function Function()length: 0name: ""toString: function toString()Symbol(Symbol.hasInstance): function Symbol.hasInstanceget arguments: function ThrowTypeError()set arguments: function ThrowTypeError()get caller: function ThrowTypeError()set caller: function ThrowTypeError()proto: Object[[FunctionLocation]]: caller: nullcreate: function create()defineProperties: function defineProperties()defineProperty: function defineProperty()entries: function entries()freeze: function freeze()getOwnPropertyDescriptor: function getOwnPropertyDescriptor()getOwnPropertyDescriptors: function getOwnPropertyDescriptors()getOwnPropertyNames: function getOwnPropertyNames()getOwnPropertySymbols: function getOwnPropertySymbols()getPrototypeOf: function getPrototypeOf()is: function is()isExtensible: function isExtensible()isFrozen: function isFrozen()isSealed: function isSealed()keys: function keys()length: 1name: "Object"preventExtensions: function preventExtensions()prototype: Objectseal: function seal()setPrototypeOf: function setPrototypeOf()values: function values()proto: function ()[[FunctionLocation]]: hasOwnProperty: function hasOwnProperty()isPrototypeOf: function isPrototypeOf()propertyIsEnumerable: function propertyIsEnumerable()toLocaleString: function toLocaleString()toString: function toString()valueOf: function valueOf()defineGetter: function defineGetter()defineSetter: function defineSetter()lookupGetter: function lookupGetter()lookupSetter: function lookupSetter()get proto: function proto()set proto: function proto()

I tested with the link you gave and could not reproduce.
Using Window 7 and Chrome Version 58.0.3029.110 (64-bit)
I did not test with my own game (I have none ongoing) so I was just a spectator watching someone elses game and using analyze mode.

Thank you for checking. I did another test with the latest Edge and not being logged in. It happened again. So something must be wrong. Especially it happens on all my devices :slight_smile:

Could it be a connection issue? Any way to test with alternative connection methods?

EDIT:
I mean the bug only appears with some connections problems perhaps.

Well, I’m on FTTH at home, so I really don’t think that this is an issue. However, It seems more stable on 4G. Interestingly “the sockets.ts:41 Termination server”-message also occurs in live play followed by the “error submitting move”-issue. I really think that they are somehow related.

I’ve had this happen to me as well, albeit seemingly intermittently.