Adds a deterministic Gomocup brain that scores open and closed lines for attack and defence, detects broken-line threats, and prioritizes exact-five wins and immediate blocks. All changes are in routes/codex-line-threats/.
The requested size-s search returned no tasks. This unclaimed, unsized game issue fit one session. It has no literal ## Done when section; the checklist below answers its objective and the repository's bot requirements in document order.
How I checked
[x] Weigh points by the open and closed lines they make and break: implemented four-direction attack/defence scoring, gaps, and distinct winning continuations; focused line and tactical tests pass.
[x] Supply a Gomocup brain in the route folder: bot.py uses only the standard library and supports START, INFO, BEGIN, TURN, BOARD, END, ABOUT and RESTART. Protocol tests cover snapshots and blocked cells; the official referee successfully ran all 36 matches.
[x] Respect exact-five standard rules: tactical tests cover all four directions and reject overlines as wins. Local suite: 11 tests passed.
[x] Stay within the nominal 1 second move limit locally: the audit recorded a maximum referee-measured reply latency of 8 ms; no timeout, startup failure, or illegal move in 36 games. This is local evidence, not a hosted performance guarantee.
[x] Run the full season check: python3 -I referee/play.py check routes/codex-line-threats scored 0.861111, versus the published starter's 0.5 and the earlier threat route's 0.833333. The audit repeated the score over six openings, both colours: neighbour 12 wins; random 12 wins; threats 6 wins, 2 draws, 4 losses.
[x] Record outcomes and next steps: route README contains reproduction commands, limitations, losses, status: done, and ## Next. out/season.md and out/games.json provide reviewable evidence generated by audit.py.
[ ] Hosted play verification: commit status remains pending with no statuses posted. The compute API lists no check-capable runner (runs_checks: false on the listed runner). Maintainer action is needed; this delivery does not claim hosted verification or acceptance.
Local Python: 3.13; code uses Python 3.12-compatible syntax and APIs. No referee, field, viewer, or dependency changes. The bot is a one-ply heuristic and still loses four of twelve games against threats; fixed-field results do not establish general strength.
Closes #1. @shoal
Adds a deterministic Gomocup brain that scores open and closed lines for attack and defence, detects broken-line threats, and prioritizes exact-five wins and immediate blocks. All changes are in
routes/codex-line-threats/.The requested
size-ssearch returned no tasks. This unclaimed, unsized game issue fit one session. It has no literal## Done whensection; the checklist below answers its objective and the repository's bot requirements in document order.How I checked
bot.pyuses only the standard library and supports START, INFO, BEGIN, TURN, BOARD, END, ABOUT and RESTART. Protocol tests cover snapshots and blocked cells; the official referee successfully ran all 36 matches.python3 -I referee/play.py check routes/codex-line-threatsscored 0.861111, versus the published starter's 0.5 and the earlier threat route's 0.833333. The audit repeated the score over six openings, both colours: neighbour 12 wins; random 12 wins; threats 6 wins, 2 draws, 4 losses.status: done, and## Next.out/season.mdandout/games.jsonprovide reviewable evidence generated byaudit.py.runs_checks: falseon the listed runner). Maintainer action is needed; this delivery does not claim hosted verification or acceptance.Reproduce
From the repository root:
Local Python: 3.13; code uses Python 3.12-compatible syntax and APIs. No referee, field, viewer, or dependency changes. The bot is a one-ply heuristic and still loses four of twelve games against threats; fixed-field results do not establish general strength.