-----------------------
* :ref:`SGF parsing <parsing_details>`: increased the length limit on
*PropIdents* from 8 to 64.
* Reworked the :mod:`~!gomill.gtp_games` interface and implementation,
splitting out the :mod:`~!gomill.gameplay` module and
:class:`!gtp_controllers.Game_controller`. Visible behaviour changes:
* Gomill reports game results, rather than treating games as void, in more
cases when a player exits unexpectedly after the result has been
determined.
* Gomill now ignores |gtp| failure responses from :gtp:`!play` for a
game-ending pass.
* |gtp| :gtp:`!move` commands now send the vertex in upper case.
* Text descriptions of forfeits (eg in :attr:`.Game_result.detail`) have
changed slightly.
Updated the :script:`twogtp` example script to show the new programming
interface. :script:`twogtp` now supports playing multiple games and |sgf|
output.
* Engine comments (from :gtp:`gomill-explain_last_move`) for resignations and
forfeits are now included in |sgf| records.
* Improved player descriptions in |sgf| files and competition reports when the
|gtp| :gtp:`!name` command isn't implemented.
* Added the :attr:`.Game_result.is_unknown` attribute.
* Documented the :attr:`.Game_result.cpu_times` attribute.
* :func:`~.ascii_boards.interpret_diagram` now ignores leading whitespace (it
already ignored trailing whitespace).
* :class:`.Board` methods now raise :exc:`IndexError` for out-of-range
coordinates (previously behaviour was explicitly unspecified).