Does qGo + GNU Go save or load handicap games incorrectly and how can one work around it
Summary

The specification shows that the file is wrongly saved and can be corrected by adding the AB property. The game seems to be saved by qGo.

Details

How to do it correctly

We can find the specification from Sensei’s Library SGF, which refers us to [SGF on Red Bean]http://www.red-bean.com/sgf/; there the specific properties for Go link to https://www.red-bean.com/sgf/go.html. There we see:

Property:   HA
Propvalue:  number
Propertytype:   game-info
Function:   Defines the number of handicap stones (&gt;=2).
        If there is a handicap, the position should be set up with
        AB within the same node.
        HA itself doesn't add any stones to the board, nor does
        it imply any particular way of placing the handicap stones.
Related:    KM, RE, RU


So we conclude that the standard does specify how to set up handicap stones and that qGo (or GNU Go) does it wrong. Moreover, adding the AB property by hand is correct, as it yields the file as it should have been saved.

For n conventionally placed handicap stones, copy the line above n up to and including the “]” above the n from:

AB[dp][pd][dd][pp][jj]
         2   3   4   5
AB[dp][pd][dd][pp][dj][pj][jj]
                         6   7
AB[dp][pd][dd][pp][dj][pj][jd][jp][jj]
                                 8   9


Which code is in error

We can start GNU Go with a command-line interface with gnugo -level 20 (for example, and see in the help text that save file saves the game. Testing this, I see that the saved game (with two moves) includes the AB property:

(;GM[1]FF[4]
SZ[19]
GN[GNU Go 3.9.1 Random Seed 1519478141 level 20]
DT[2018-02-24]
KM[0.0]HA[2]RU[Japanese]AP[GNU Go:3.9.1]AB[pd][dp]
;W[pp];B[dd])


I conclude that qGo implements its own save function and does it wrong; perhaps it implements this in order to include the player names (PW &amp; PB), territory (TW &amp; TB) and something called style (ST[1]) which is described at https://www.red-bean.com/sgf/properties.html#ST:

Property:   ST
Propvalue:  number (range: 0-3)
Propertytype:   root
Function:   Defines how variations should be shown (this is needed to
        synchronize the comments with the variations). If ST is omitted
        viewers should offer the possibility to change the mode online.
        Basically most programs show variations in two ways:
        as markup on the board (if the variation contains a move)
        and/or as a list (in a separate window).
        The style number consists two options.
        1) show variations of successor node (children) (value: 0)
           show variations of current node   (siblings) (value: 1)
           affects markup &amp; list
        2) do board markup         (value: 0)
           no (auto-) board markup (value: 2)
           affects markup only.
           Using no board markup could be used in problem collections
           or if variations are marked by subsequent properties.
           Viewers should take care, that the automatic variation
           board markup DOESN'T overwrite any markup of other
           properties.
        The  final number is calculated by adding the values of each
        option. Example: 3 = no board markup/variations of current node
                 1 = board markup/variations of current node
        Default value: 0
Related:    C, FF, GM, SZ, AP, CA