{"id":16932549,"url":"https://github.com/wgreenberg/roach","last_synced_at":"2025-07-25T16:04:27.588Z","repository":{"id":38431478,"uuid":"308458052","full_name":"wgreenberg/roach","owner":"wgreenberg","description":"The Ranked Online Arena for Computer Hive","archived":false,"fork":false,"pushed_at":"2022-06-03T22:50:18.000Z","size":402,"stargazers_count":8,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-11T18:53:09.734Z","etag":null,"topics":["ai","hive","matchmaking"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wgreenberg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-29T21:50:14.000Z","updated_at":"2024-02-22T19:22:38.000Z","dependencies_parsed_at":"2022-09-19T17:43:42.223Z","dependency_job_id":null,"html_url":"https://github.com/wgreenberg/roach","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wgreenberg/roach","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wgreenberg%2Froach","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wgreenberg%2Froach/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wgreenberg%2Froach/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wgreenberg%2Froach/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wgreenberg","download_url":"https://codeload.github.com/wgreenberg/roach/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wgreenberg%2Froach/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265703236,"owners_count":23813955,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","hive","matchmaking"],"created_at":"2024-10-13T20:46:53.812Z","updated_at":"2025-07-18T05:04:28.759Z","avatar_url":"https://github.com/wgreenberg.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"roach: Ranked Online Arena for Computer Hive\n============================================\n\nhttps://boardgamegeek.com/thread/2543889/proposal-online-ai-hive-arena\n\nRequirements:\n* Users (humans) should be able to register players (AI) with the server\n* Each player should be publicly ranked using an ELO system, and have a secret\n  authentication token associated with it\n* Any agent with a valid authentication token should be able to engage in\n  matchmaking, and eventually play a game with the sever\n* Games should be publicly accessible as UHP sessions\n* The server should provide a default AI player to play against if nobody's\n  playing\n* ELO rankings should be publicly viewable\n* The server should matchmake players according to their ELO rankings\n\nSome baseline rules:\n* Tournament rules (no Queens on turn 1)\n* Only base Hive and PLM are valid\n* If a player disconnects or times out, it counts as a forfeit\n* Games will use time control to prevent neverending games\n* If there's a major rules bug in the server engine, all ELO scores can/will be\n  invalidated\n\nMultiplayer model:\n* All players must implement the UHP Engine interface to play. roach will\n  provide a thin adapter layer to ease the burden of writing this for each AI\n* The adapter will only require that an AI provide a stdin/stdout interface\n  that, given a UHP GameString (and possibly the remaining time), provides the\n  AI's next move\n\nAPI:\n* POST /matchmaking (auth) - join matchmaking\n* GET /matchmaking (auth) - poll status of a matchmaking ticket\n* GET /play (auth) - player's websocket endpoint for their active game\n* GET /games - list of all completed games\n* GET /game/:id - info for a game, including metadata and UHP session\n* GET /players - list of all players\n* GET /player/:id - info for a player\n* POST /player - create a new\n\npre-beta TODO:\n- [x] update ELO after games\n- [x] docs for writing AI\n- [ ] turn timer\n- [ ] default player in matchmaking\n- [ ] test game endpoint?\n\npost-beta TODO:\n- [ ] add Users (w/ oauth?) to manage multiple Players\n- [ ] game viewer\n- [ ] view active matches\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwgreenberg%2Froach","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwgreenberg%2Froach","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwgreenberg%2Froach/lists"}