From 708cf8d1568b97e4acd152e9c080a16f33029f12 Mon Sep 17 00:00:00 2001 From: David Bloomin Date: Mon, 22 Jun 2026 13:46:46 -0700 Subject: [PATCH] feat(configs): bundle agricogla commissioner config + publish its image Add agricogla as a first-class bundled ruleset_strategy config (like cue_n_woo etc.) and a matrix entry so CI builds + publishes ghcr.io/metta-ai/commissioners- agricogla to GitHub Packages from source. It's `default` plus 10 competition episodes/round and `scoring.round_score: rank` (per-episode placement). This lets the agricogla coworld reference a published commissioner image directly (the cogsul/coguire/werecog pattern) instead of a downstream Dockerfile that does `FROM commissioners-default@digest` + COPY config and pushes a locally-built image. Co-Authored-By: Claude Opus 4.8 --- .../workflows/build-commissioner-images.yml | 4 ++ .../configs/agricogla.yaml | 56 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 commissioners/ruleset_strategy_commissioner/configs/agricogla.yaml diff --git a/.github/workflows/build-commissioner-images.yml b/.github/workflows/build-commissioner-images.yml index 31ca105..f6d67b7 100644 --- a/.github/workflows/build-commissioner-images.yml +++ b/.github/workflows/build-commissioner-images.yml @@ -33,6 +33,10 @@ jobs: commissioner_key: config_driven ruleset_strategy_config_name: default image: ghcr.io/metta-ai/commissioners-default + - name: agricogla-commissioner + commissioner_key: config_driven + ruleset_strategy_config_name: agricogla + image: ghcr.io/metta-ai/commissioners-agricogla - name: among-them-commissioner commissioner_key: config_driven ruleset_strategy_config_name: among_them diff --git a/commissioners/ruleset_strategy_commissioner/configs/agricogla.yaml b/commissioners/ruleset_strategy_commissioner/configs/agricogla.yaml new file mode 100644 index 0000000..f6b975d --- /dev/null +++ b/commissioners/ruleset_strategy_commissioner/configs/agricogla.yaml @@ -0,0 +1,56 @@ +# agricogla: 4-seat worker-placement game. Same as `default` except: +# - competition rounds run 10 episodes (not 1) so baseline_window seating seats +# every champion across the 4 seats each round instead of only 4 of them. +# - rounds are scored by per-episode placement (round_score: rank) instead of mean +# score, so the league rewards consistently beating the table, not blowouts. +scoring: + round_score: rank + +defaults: + seating: baseline_window + fill_seats: duplicate + min_entries_to_start: 2 + stage: + label: Round + episodes: 10 + min_episodes_per_entrant: 1 + +divisions: + qualifiers: + name: Qualifiers + level: -99 + match: + name: Qualifiers + type: staging + entrants: qualifying + min_entries_to_start: 1 + stages: + - id: crash_check + schedule: + label: Qualifier + self_play: true + attempts: 2 + min_episodes_per_entrant: 2 + on_episode_complete: + - id: qualified + criteria: + completed_episodes_gt: 0 + actions: + - type: update_membership + division: competition + status: competing + substatus: champion + - id: disqualified + criteria: otherwise + actions: + - type: update_membership + status: disqualified + substatus: inactive + + competition: + name: Competition + previous_name: Daily + level: 1 + match: + type: competition + entrants: champions