Skip to content

chore: merge master - #845

Merged
jim-at-stink merged 31 commits into
go-v2/mainfrom
go-v2/chore/merge-master
Mar 25, 2026
Merged

chore: merge master#845
jim-at-stink merged 31 commits into
go-v2/mainfrom
go-v2/chore/merge-master

Conversation

@jim-at-stink

Copy link
Copy Markdown
Collaborator

Domino has fixed the speed drop down in the playback controls above the LLM log viewer. Merging master to get this change into our go-v2 branch.

Screenshot 2026-03-25 at 13 41 14

develra and others added 30 commits February 24, 2026 12:45
The problem here is that the game name is actually `repeated_game` and
IPD is a variant of that.

I think we can't rename `repeated_game` since that's tied to the
`open_spiel` name ([see
comment](#694 (comment)))

So I moved IPD to be a visualizer under `/repeated_game`, similar to how
`v2` and `default` live under `/chess`
)

Key differences found with offical rule book:
- Passing: Guessers can currently pass without making any guesses.
Official rules require at least 1 guess before passing.
- Clue Validation: The environment accepts any string as a clue, even if
it's a substring of an unrevealed word on the board.
- Special Clues: "0" and "Unlimited" clues are not supported to grant
unlimited guesses.
- Starting Team: Red team always starts and always has 9 words. Official
rules randomize this.

**NOTE**: If invalid word is guessed, opposing team will be allowed to
reveal 1 of their own words at random. Official rule allows the opposing
team to pick the word of their choosing which can be the next iteration.

Also in the next iteration I will try to implement these valid clue
boundaries
https://filemanager.czechgames.com/storage/files/codenames/rules/CN%20rulebook%20EN%2030.pdf#page=6
We should probably rethink this whole manifest.json thing sometime - but
need this now for the WIP stuff from Stink to show up in the selector
drop-down.
Automated: Migrate {target_path} from gsutil to gcloud storage

This CL is part of the on going effort to migrate from the legacy
`gsutil` tool to the new and improved `gcloud storage` command-line
interface.
`gcloud storage` is the recommended and modern tool for interacting with
Google Cloud Storage, offering better performance, unified
authentication, and a more consistent command structure with other
`gcloud` components. 🚀

### Automation Details

This change was **generated automatically** by an agent that targets
users of `gsutil`.
The transformations applied are based on the [gsutil to gcloud storage
migration guide](http://go/gsutil-gcloud-storage-migration-guide).

### ⚠️ Action Required: Please Review and Test Carefully

While we have based the automation on the migration guide, every use
case is unique.
**It is crucial that you thoroughly test these changes in environments
appropriate to your use-case before merging.**
Be aware of potential differences between `gsutil` and `gcloud storage`
that could impact your workflows.
For instance, the structure of command output may have changed,
requiring updates to any scripts that parse it. Similarly, command
behavior can differ subtly; the `gcloud storage rsync` command has a
different file deletion logic than `gsutil rsync`, which could lead to
unintended file deletions.

Our migration guides can help guide you through a list of mappings and
some notable differences between the two tools.

Standard presubmit tests are run as part of this CL's workflow. **If you
need to target an additional test workflow or require assistance with
testing, please let us know.**

Please verify that all your Cloud Storage operations continue to work as
expected to avoid any potential disruptions in production.

### Support and Collaboration

The `GCS CLI` team is here to help! If you encounter any issues, have a
complex use case that this automated change doesn't cover, or face any
other blockers, please don't hesitate to reach out.
We are happy to work with you to test and adjust these changes as
needed.

**Contact:** `gcs-cli-hyd@google.com`

We appreciate your partnership in this important migration effort!

#gsutil-migration
...and fix the background color on avatars because it was bothering me
for Grok
No logical changes - just moving stuff around.

The only thing this would break is if we update kaggleazure to use a new
version of kaggle-environments, but I have sibling PR about to go up to
remove the import.

I think there is some debate about if each version of a game visualizer
(e.g. chess default and chess v2) should use the same transformer or not
- I just duplicated them for now, but we may want to revisit that.

cc @jim-at-stink - once this is merged you will need to also move the go
transformer to your directory.
My bad - this refactor I dropped the custom overrides for poker. This
should fix it.
…ment (#802)

Currently, visualizer discovery relies on a global manifest.json
generated from master's source tree. This creates problems when games
like Go have active development on long-lived branches: the manifest
needs the variant to exist on master for discovery, but master's deploy
then overwrites the branch-deployed assets. The SKIP_GAMES env var works
around this but lives in CI trigger config, is invisible to reviewers,
and requires manual coordination.

This change introduces two mechanisms to fix this:

1. web/config/branch-owned.json - a checked-in config declaring which
game/visualizer variants are owned by non-master branches (e.g.,
"open_spiel_go/v2": "go-v2/main"). The collect-artifacts and
validate-manifest scripts read this to skip branch-owned variants during
master builds, replacing the SKIP_GAMES env var.

2. web/scripts/merge-game-indexes.py - writes per-game index.json files
to GCS (e.g., episode-visualizers/open_spiel_go/index.json containing
["default", "v2"]). Uses a union merge so that visualizers deployed by
different branches coexist in the index without stomping each other. The
main pipeline runs this after deploy as a new step.

Together these allow the consumer (kaggleazure) to eventually switch
from fetching one global manifest to fetching a per-game index, which
any branch can contribute to independently.

This is the first P.R. of three - this won't change any prod behavior
but will let me validate that the game-specific manifests are generating
correctly.
Currently each game dev branch (go-v2/main, chess-v2/main, etc.) needs a
bespoke Cloud Build trigger manually configured with four substitution
variables. This doesn't scale and is easy to misconfigure.

This adds a single generic trigger that reads branch-owned.json from
master to determine which visualizers the current branch owns, then
builds and deploys only those. A branch cannot modify its own
permissions since the config is always fetched from the trusted master
branch via git fetch.

To register a new branch, add one line to branch-owned.json on master
via PR, then set up a single Cloud Build trigger pointing to
cloudbuild-branch-visualizer.yaml with no substitution variables needed.

New files:
- plan-branch-deploy.js: discovers owned visualizers, builds them,
stages artifacts (runs in node container)
- deploy-branch-visualizers.py: deploys staged artifacts to GCS and
updates per-game index.json files (runs in gcloud container)
- cloudbuild-branch-visualizer.yaml: two-step pipeline config

I'll verify it all works as expeceted.
See chat for discussion of how this impacts accessibility quality for
controlling Go settings
Quick follow up based on Pim's super helpful feedback!
Example result: 
<img width="3456" height="1916" alt="image"
src="https://github.com/user-attachments/assets/d5af7e6b-3839-474a-ae67-30fdf14bc00a"
/>

This is OpenSpiel specific but could be referenced or adapted into a new
skill for whipping up a visualizer after a harness has already been
created for a new game (which I think is closer to what @c-h-i-a-m-a-k-a
wants)

cc @jhtschultz this is what I want to talk about tomorrow!
The core of the issue here was a stale value in callbacks done by
`scheduleNextStep`

cc @jim-at-stink
@jim-at-stink
jim-at-stink marked this pull request as ready for review March 25, 2026 13:42
@google-cla

google-cla Bot commented Mar 25, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@jim-at-stink
jim-at-stink merged commit 01b59d3 into go-v2/main Mar 25, 2026
2 of 3 checks passed
@jim-at-stink
jim-at-stink deleted the go-v2/chore/merge-master branch March 25, 2026 13:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants