feat(data-repo): runlog-index GitHub Action keeps runlogs/<folder>/index.json current - #187
Merged
Conversation
…<folder>/index.json Option 1 from the review: the data repo itself keeps the catalog index current. scripts/data-repo-workflows/runlog-index.yml (template installed into each data repo) runs on every push under runlogs/ (ignoring its own index.json commits), serializes concurrent runs, sparse-checks-out only .github, computes the touched folders from the push payload (added/modified/removed), and rebuilds just those via build-runlog-index.py --github with GITHUB_TOKEN. workflow_dispatch rebuilds all folders. Arena Studio does NOT write the index (option 2 dropped: one writer, no commit-path change on running rigs, covers hand pushes/migrations/deletions). build-runlog-index.py: --folder is repeatable; index PUT retries on a stale-sha 409/422. Comments/README updated to name the Action as the writer. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ange reads; skip unchanged index.json
First live run rebuilt ALL folders (push-payload parse found no paths) and hit
a transient connection reset on one of ~340 range reads. Detection now uses
GET /compare/{before}...{sha} (paginated); raw range reads retry 4x; an index
that is byte-identical is not re-committed (no no-op bot commits).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Contributor
Author
Live verification on
|
| event | run | detection | rebuilt | bot commits |
|---|---|---|---|---|
| add throwaway | success | changed files: 1 → folders: bench00 |
bench00 only (4 runs) | 1 |
| delete throwaway | success | changed files: 1 → folders: bench00 |
bench00 only (3 runs) | 1 |
- Index after add contained
idxtest3withduration_s123.456 /complete: true; after delete it is back to the 3 real bench00 runs. No re-trigger from the bot's own index commits (loop guard works). - Earlier iteration (before the compare-API change) fell back to rebuilding all 12 folders and hit one transient
ConnectionResetErroron ~340 range reads — hence the read retries and the unchanged-index skip in this PR. - Follow-ups on the feat(studio): data-repo registry — lab repo picker, "Rig id", no default repo (v0.72) #178 branch (files live only there):
scripts/seed-data-repo.shinstalls both files into new data repos;docs/development/data-repo-setup.mdgets the index section. Arena Studio does not write the index.
mbreiser
added a commit
that referenced
this pull request
Sep 7, 2026
…ex.json isRunlogName accepted bare .json, and #188 applies it to directory listings (data-repo browse, URL index) and the corpus parity script. Since #187 every runlogs/<folder>/ carries an index.json catalog, so the dashboard would list each folder's index as a run and the corpus gate failed on all 12 of them (174/174 logs themselves pass). Narrow the shared filter to .jsonl|.ndjson (+ .gz); the drop handler keeps accepting a user-dropped .json to match the file input's accept list. Vendored copy synced; test updated. Corpus gates on this branch (course clone @ 37d003e, 174 logs): scripts/runlog-v2-corpus.py 174/174 ok dashboard/data-browser/tests/corpus-v2-parity.js 174/174 ok (was 174 ok + 12 index.json FAIL) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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.
Summary
Option 1 from today's review: the data repo keeps its own catalog index. A workflow template,
scripts/data-repo-workflows/runlog-index.yml, runs on every push underrunlogs/, rebuilds only the touched folders'index.jsonwithscripts/build-runlog-index.py --github(64 KB head + 4 KB tail per file, never a full log), and commits them withGITHUB_TOKEN.pathsfilter excludesrunlogs/**/index.json, so the bot's own commits don't retrigger.workflow_dispatchrebuilds every folder by hand..githubonly — the workflow never downloads the multi-GB logs.--folderis now repeatable.Arena Studio does not write the index (option 2 dropped): one writer, no change to the run-log commit path while experiments are running, and hand-pushed large logs, migrations and deletions are all covered because each folder is rebuilt from what is present.
Installed into
reiserlab/cshl-2026-coursetoday (.github/workflows/runlog-index.yml+.github/scripts/build-runlog-index.py) and verified with a throwaway push (see PR comment). The seed-script install step and the setup-doc section go into #178 (those files live only on that branch).🤖 Generated with Claude Code