Repository navigation
feat(minimums): publish the table to GitHub Pages without a cross-repo token - #82
Merged
Merged
Conversation
…o token Replace the CLUSTERMAX_WEB_TOKEN push to clustermax-web-oss with a GitHub Pages deploy that uses the run's own OIDC token. The site carries one file, minimum-versions.json, with a daily refreshed stamp and a changed stamp from the table's Git history. The CLI fetches the Pages address, keeps the last fetched table in its cache, and warns when a failed fetch leaves it on a table last refreshed more than 7 days ago.
aliencaocao
requested review from
JordanNanos,
Prathmesh234 and
samharshe
as code owners
October 24, 2026 14:45
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
The
minimum-versions-publishjob pushes the minimum version table toSemiAnalysisAI/ClusterMAX-webwith theCLUSTERMAX_WEB_TOKENpersonal access token. A long-lived token with write access to another repository is a security risk. The job has also failed on every run since 2026-10-22, so the public table is old.This change publishes the table to the GitHub Pages site of this repository. The deploy uses the OIDC token of the run. No secret is necessary.
What changed
.github/workflows/minimum-versions-publish.yml: replaced the cross-repository push with a GitHub Pages deploy (actions/upload-pages-artifact+actions/deploy-pages). The job runs after eachminimum-versions-refreshrun (workflow_run), on a push tomasterthat changes the table, daily at 08:43 UTC as a safety net, and by hand. It has nosecrets.reference.https://semianalysisai.github.io/ClusterMAX/minimum-versions.json. A step stops the job if the site directory contains any other file..github/scripts/minimum_pages.py(new) builds that file fromcmax/scripts/1-audit/minimum-versions.jsonand adds two top-level stamps:refreshed: the completion time of the latest successfulminimum-versions-refreshrun. It moves every day, also when no minimum changed. If the lookup fails, the script keeps the value that the site serves now. The script never sets this value older thangenerated.changed: thegeneratedstamp of the oldest consecutive revision of the table (from Git history) that has the current minimum values. A metadata-only change or a timestamp-only refresh does not move it.actions/attest-build-provenance. Anyone can verify it withgh attestation verify minimum-versions.json --repo SemiAnalysisAI/ClusterMAX.cmax/minimum_sync.py: the default address is now the Pages address. Newrefreshed_stamp(),table_refreshed()andstale_warning()functions.cmax/security.py: when the fetch fails, the audit grades against the cached table (the last successful fetch) if it is not older than the installed table, and against the installed table otherwise. This behavior was already present. New: when the table in use was last refreshed more than 7 days ago, the audit gives a second warning. The decision usesrefreshedonly (generatedfor a table withoutrefreshed, for example the table inside the package). A successful fetch, a304 Not Modified, or a rejected older publication gives no warning.cmax/cli.py,cmax/minimum_links.py,README.md: the Pages address and the new warning..github/scripts/select_tests.py: the publish workflow and the new script now selecttests/test_minimum_pages.py.Effect
cmax audit securityreads the Pages address. An offline run prints a warning when its table was last refreshed more than 7 days ago.CLUSTERMAX_WEB_TOKENsecret and revoke the token.changedkey replaces the website-onlyupdatedkey. Released clients (0.3.0 and older) readhttps://www.clustermax.ai/minimum-versions.json. The companion website change (ClusterMAX-web #40) makes that address serve the Pages copy.Technical terms
OIDC token: a short-lived identity token that GitHub Actions gives one workflow run. GitHub Pages accepts it for the deploy, so no stored secret is necessary.attestation: a signed record that a specified workflow run on a specified commit made a specified file.Validation
python3 -m pytest -q: 2196 passed.tests/test_minimum_pages.py(new): thechangedhistory walk,refreshedmoves without a content change, fallbacks, the completeness gate, the one-file site, and no secret in the workflow.tests/audit/test_minimum_sync.py::StalenessTests(new): the 7-day limit,refreshedovergenerated, cached and installed fallbacks, and no warning after a successful fetch or a rejected older publication.minimum_pages.pyagainstmastergavegenerated=2026-10-21T07:34:42Z changed=2026-10-21T07:34:42Z.git diff --check: clean.Merge plan
CLUSTERMAX_WEB_TOKENsecret and revoke the token.Design decisions for approval
raw.githubusercontent.comcaching and rate limits.Note:
minimum-versions-refreshhas failed at "Run the offline audit policy tests" since 2026-10-22. A failed run does not moverefreshed, so until that is fixed the publishedrefreshedstays at the last successful run (2026-10-21). An offline client starts to warn after 7 days. This is the intended signal.Created with Perplexity