Repository navigation
toolchain: keep the live suite's player libraries current (one rolling pull request) - #566
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…st is ready (docs check) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- playerTargets keeps its state in Maps and builds the set with Object.fromEntries: a library named __proto__ (a key JSON.parse makes from a file or the registry) was silently dropped from the set (CodeQL js/remote-property-injection, 4 alerts; the new test fails without it). player-libraries.json's names must be npm package names, and a scoped name is encoded with replaceAll. - A live run that timed out is started again once, as a cancelled one is (bounded at two runs per commit), and the reason after that no longer blames a public stream for what was cancelled. - The pull request's text renders the libraries held back by a range (it printed a field the plan does not have) and the ranges that do not hold on main already. - docs: 11 libraries are 16 packages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 24, 2026
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.
The 16 npm player libraries the live suite plays (
tests/e2e/live-specs/players.e2e.mjs) were pinned in the spec, and nothing kept them current. This is the second update gap found while checking what Dependabot does not cover. #565 was the first.Why not Dependabot
A Dependabot npm entry for a folder that holds only a
package.jsonwould not stay in that folder. When the configured folder has no lockfile, dependabot-core's npm fetcher (npm_and_yarn/lib/dependabot/npm_and_yarn/file_fetcher.rb) takespnpm-lock.yamlandpnpm-workspace.yamlfrom a parent folder (fetch_file_from_parent_directories). So Dependabot would bring in the repository's own lockfile. What its pnpm updater then does to that lockfile is not established, and a lockfile of the libraries' own would add their whole dependency trees to the alerts, though the suite never loads those trees. The toolchain workflow already handles pins Dependabot cannot see, so these join it.What changes
tests/e2e/live-specs/player-libraries.json, which the spec reads. Its lookup takes own keys only (Object.hasOwn): a path such as/npm/constructor/...would otherwise have foundObject.prototype's.tools/check-toolchain.mjscomputes the set (playerTargets()):MIN_AGE_DAYS) and not deprecated.toolchain-updates.ymlkeeps ONE rolling pull request, "Toolchain update: player libraries" ontoolchain/player-libraries. It is rebuilt in place onmainwhen the set changes, and CI and the live suite are started on each new head (the runs before the text).mainhas caught up.--apply-playersrefuses a library going back, a library it does not know, or a version that is not x.y.z.update-prs.ymllearns the kindplayers. Only that JSON may change. "Ready" also needs the live suite (live-streams.yml) to have passed on the very commit, because CI does not play these libraries. This is asked last, once everything else holds:On the update-branch path the live suite is started too, since no push starts it.
live-streams.ymlgets a last job, hand-off. On that branch, once the suite ended (always()), it startsupdate-prs.ymlwith the CI run on the same commit, but only if that CI run passed; otherwise CI's own hand-off decides. It is tried three times, and then opens or comments on the issue ci.yml's hand-off uses.docs/maintenance.md(two rows),docs/notes/workflows.md,docs/notes/playback-testing.md.Tested
tests/unit/checkToolchain.test.mjs, 172):relation()on every range form;playerTargets(), including both real families, cycles of exact peers, a conflict already onmain, and a library held back;applyPlayers();>1.2as>=1.3.0and<=1.2as<1.3.0). The 5 new rows fail without the fix.verify:linux workflows, which also ran actionlint, shellcheck and zizmor):toolchain-updates.test.sh: 224 checks, 0 failed, 83 of them new for the rolling pull request (new set, same set, changed set, conflict, someone else's commits, caught up, skipped, next set, malformed set, refused apply, each majors-issue case);update-prs-decide.test.sh: 690 checks, 0 failed (every live-suite state, the update-branch path, the migration texts);live-streams-hand-off.test.sh.tests/e2e/live-specs/**), with the pins read from the JSON.Not established yet: the real chain in Actions (the rolling pull request, its two dispatched runs, both hand-offs, the verdict). After the merge, one dispatch of
toolchain-updates.ymlonmainraises the first rolling pull request (four updates are due today) and shows it.glm reviewed the design, the workflow parts, the code and the docs; the findings that held up against the code are fixed here.
🤖 Generated with Claude Code