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.
No checks reported
The project’s checks post their results on commits.
This branch has no conflicts with the base branch
Maintainers, or whoever owns main, can merge this.
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.