BUG#1
    long known, insignificant
    Python: CPython 2.7.3 (3.2.3 doesn't seem to have this bug,
        but further testing is needed.)
    OS: Only one has been tested: Trisquel 6.0 (Linux 3.2)
    curses.version: 2.2
    Library: ncurses5.9
    Description
        If the screen has been resized while in curses mode,
        the interpreter may write some warning when exiting:
            close failed in file object destructor:
            sys.excepthook is missing
            lost sys.stderr

(SOLVED) BUG#2 2016-01-07
    Solved in 0.0.25, bug is available in 0.0.24 and below:
        A bug in anonymine_solver.py (solver.rule9bf) has been fixed,
        the symptoms of this bug haven't occured since the fix.
        (At least 717708 fields (30x16 with 99 mines) have been tested.)
    Traceback:
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
          File "/usr/lib/python2.7/cProfile.py", line 29, in run
            prof = prof.run(statement)
          File "/usr/lib/python2.7/cProfile.py", line 135, in run
            return self.runctx(cmd, dict, dict)
          File "/usr/lib/python2.7/cProfile.py", line 140, in runctx
            exec cmd in globals, locals
          File "<string>", line 1, in <module>
          File "test.py", line 39, in run_prof
            won, levels = solver.solve()
          File "anonymine_solver.py", line 1105, in solve
            success, update_difficulty = self.solver_loop()
          File "anonymine_solver.py", line 957, in solver_loop
            unsolved_cells.append((cell, rank_cell([cell], i)))
          File "anonymine_solver.py", line 934, in rank_cell
            more_cells = cells + self.number_neighbours(cells)
          File "anonymine_solver.py", line 638, in number_neighbours
            assert self.field.get(neighbour) != 'X'
        AssertionError

(WORKAROUND) BUG#3 2016-01-08, severe
    More or less platform specific.
    OS: Debian 8 (Linux 3.16) (x86-64)
    curses.version: 2.2
    Library: ncurses5.9
    Description:
        After forking, it appears, when the field is being initialized, the
        curses mode stops working.
    Solution:
        Define a program mode and temporarily reset to shell mode while
        initializing the field.
            The cursor can still not be hidden, so it will be moved to an
        unimportant place.
            The screen requires one complete redrawal of the screen, so that
        will also be done.
    NOTICE:
        FOR THE LOVE OF KEN, DO NOT REMOVE WORKAROUND!!
    NOTICE:
        DO NOT REMOVE.
        This is referenced from the source.
    NOTICE: WEIRD:
        Of some reason: This must be done whenever a cell is clicked on,
        not just around initialization.
    Update 2016-07-17:
        The windows only needs to be redrawn on initialization, not on every
        click.
        Trying to leave and re-enter curses mode was no good.

BUG#4 is bogus

BUG#5
    The user's own configuration files have a higher priority than the system
    wide, and will be loaded if available.  If they are out of date the game
    will crash.

(SOLVED) BUG#6 2016-02-03
    There was a small possibility that another slave would finish before
    getting killed by the master, causing os.kill to fail.
    Because of this, the slaves will from now on be killed with SIGCONT
    rather than SIGTERM, as SIGCONT will be ignored by an innocent process
    that might start after a second slave finishes but before the slave
    gets killed by the master.
    Update 2016-07-15:  Processes will only be killed if their tempfiles
    can't be deleted (most likely because they don't exist yet);
    Update 2016-07-15:  SIGTERM will be used if SIGCONT does not exist.

BUG#7 2016-02-09
    anonymine.py (curses_game.output)
        window.bkgdset causes a nasty issue when the background character
        is not space (0x20).
    Workaround in place.

(SOLVED) BUG#8 2016-07-07
    mkenginecfg
        `nonexistent-cpulister | wc -l` prints "0" and SUCCEEDS.
        The bug was fixed immediately on discovery.

BUG #9 (old)
        sys.stdin.readline() in `ask` dies with IOError and
        errno=EINTR when the terminal gets resized after curses has
        been de-initialized.
        1: SIGWINCH is sent by the terminal when the screen has been
            resized.
        2: curses forgot to restore the signal handling of SIGWINCH
            to the default of ignoring the signal.
            NOTE: signal.getsignal(signal.SIGWINCH) incorrectly
                returns signal.SIG_DFL. (Default is to be ignored.)
        3: Python fails to handle EINTR when reading from stdin.
    REFERENCES:
        Issue 3949: https://bugs.python.org/issue3949
        PEP 0457: https://www.python.org/dev/peps/pep-0475/
    SIMULATION:
        Function `bug1` in 'test.py'.
    FIX #1 (caused new BUG: Can't resize on later games/SIGWICH not reset):
        Set signal handling of SIGWINCH to ignore.
        SIGWINCH:       Fixed by the solution.
        SIGINT:         Properly handled by Python. (Well tested.)
        SIGTSTP:        Default is STOP, seems to be at default.
        Any other signal will probably not be caught and
        IOError with errno=EINTR will therefore never be returned.
    APPARENTLY IMMUNE PLATFORMS:
        CPython 3.2.3 with curses.version='2.2' and ncurses 5.9
    FIX #2 (0.2.17)
        Accept that `IOError`s and `InterrputedError`s may be raised
        by IO functions.  


Problematic platforms
=====================

    #1  Minor: Debian 7 with CPython 2.6.7
    #2  Major: openindiana
    #3  Fatal: PyPy
    #4  Minor: Cygwin
    
    #1
        OS:             Debian 7 (x86-32 on VM)
        Python:         CPython 2.6.8
        curses.version  2.2
        curses library: ncurses 5.9
        severity:       minor/potentially medium
        symptoms:       Terminal resizing doesn't work.
    
    #2
        OS:             openindiana
        kernel:         illumos
        arch:           x86-32 (VirtualBox)
        Python:         CPython 2.6.4
        terminal:       GNOME Terminal 2.30.2
        severity:       bad
        symptoms:       * Manual installation required:
                            Incompatible install(1M)
                        * Crashes the terminal window on the second game.
                        * Crashes ALL terminal windows when the window is
                            shrunk too much.
    #3
        Python:         PyPy
        severity:       severe
        symptoms:       The solver function misbehaves.
                        This probably causes the long/infinite initialization
                        times.
        Traceback (archived version 0.0.29):
            Traceback (most recent call last):
              File "<stdin>", line 1, in <module>
              File "test.py", line 258, in runneumann
                print(solver.solve())
              File "anonymine_solver.py", line 1115, in solve
                success, update_difficulty = self.solver_loop()
              File "anonymine_solver.py", line 978, in solver_loop
                status = self.cell_solver(cell, 4*i + j)
              File "anonymine_solver.py", line 842, in cell_solver
                """.format(possibilities)
            AssertionError: 
                            Cell already solved?? []
    
    #4
        OS:             Cygwin (unknown)
        Windows:        NT 6.1 (64 bit)
        Python:         2.7.10 (python package on Cygwin; probably CPython)
        severity:       conditionally severe
        symptoms:       Screen goes black on resizing.

