Repository navigation
Conversation
A dependency update (#3) moved the image's Node.js stage to node:26-trixie-slim. It was merged the day after the published time run had been measured in this image with Node.js v24.21.0. The README and docs/results.md give ./scripts/run-docker-timing.sh as the way to reproduce that run, and the script builds this image, so the command no longer reproduced the versions the results name. The Dockerfile's own header, ADR 16, the runbook, the study script and CI all still say Node.js 24, and Node.js 26 does not become a long-term support line until 28 October 2026 (the nodejs/Release schedule). Put back the line the Dockerfile had before: the digest that the run recorded in data/runs/20261002T211256Z-docker/environment.txt. Docker Hub still serves that digest for the tag, and the image built from it reports Node.js v24.21.0, Python 3.12.14 and gcc 14.2.0, as docs/results.md does. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
ruff still targeted Python 3.10. The Python worker once claimed to run on 3.10 or later, which nothing tested; f66878c corrected ADR 9 and the worker's docstring to 3.12 or later, which is what CI tests, and ruff's target was left behind. mypy's python_version and the study script's check already said 3.12. With the old target, ruff's upgrade rules held the code to syntax that 3.10 understands. ruff check and ruff format --check pass unchanged with the new target, so no code needed rewriting. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Putting the base image back does not stop the same drift next week: Dependabot would propose node:26-trixie-slim again, and nothing in CI compares the Dockerfile with what the documents and the published run say. - Dependabot now ignores Node.js 25 and later and Python 3.13 and later for the Docker image, so it only refreshes the digests of the two lines that the published results were measured with. Moving to another line stays a decision for a person, because CI, the scripts and the documents have to change with it and the time study has to be measured again. - tests/integration/test_versions.py reads the Dockerfile's two FROM lines and fails when another place names a different version: the Dockerfile's own header, the workflow, pyproject.toml, the requirements headers, the study script, the runbook, ADR 9 and 16, study.md and the README. It also checks that Dependabot's bounds are the lines after the Dockerfile's, that the oldest supported Node.js is the same in package.json, CI, the study script and the README, and that the Dockerfile's base image tags are the ones the published Docker run recorded in its environment.txt. It reads files only, and runs with the integration tests in the existing CI job. - ADR 16 gets a status note with what happened and when Node.js 26 becomes a long-term support line. The README describes the test and says that CI does not build the image. On main the new test fails in 13 places (the Node.js line, ruff's target and the missing Dependabot bounds); with the two commits before this one it passes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The report wrote summary.csv through Python's csv module with its default line ending, CR LF, while the harness writes runs.csv with LF and .gitattributes stores every text file with LF. The copy committed in data/runs/ therefore has LF endings, and running the recorded report command again on the same run gave a summary.csv that differed from it in every line ending, although docs/results.md, both charts and the README block came out byte for byte the same. Write LF. The test reads the file as bytes, because read_text converts CR LF to LF and so could not see the difference; it fails without the change. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The README's link to Algorithm-Energy-C pointed at this repository's front page, which is the README the reader is already on: greenbench replaced the C benchmark in the same repository. Link to the tree at 0bf73c8, the last commit on main before greenbench was merged, and say that the benchmark lived here. A link to a commit keeps working if the repository is renamed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The notes added with the Dependabot bounds described its behaviour as a
fact ("only refreshes the digests"). The bounds are configuration that
was validated against the Dependabot schema but cannot be run locally,
so the Dockerfile header, the comment in dependabot.yml and ADR 16 now
describe the configuration; the version test is what fails if another
line gets through.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The README said the version tests fail when the Dockerfile's base images are not the ones that the published Docker run recorded, and ADR 16 that they fail when the places name different versions. The test compares the Node.js and Python lines (24, 3.12) and the base image tags, and leaves patch releases and digests out, so that a digest refresh of the same tag passes. That matters for what the results name: the digest that Docker Hub served for python:3.12-slim-trixie on 4 October 2026 holds Python 3.12.15, and the pinned digest, which the published run used, holds 3.12.14. Say so in both places, so that nobody reads the test as holding the exact images. 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.
What was wrong
node:24-trixie-slimtonode:26-trixie-slim. The published time run had been measured in that image the day before with Node.js v24.21.0, and the README anddocs/results.mdgive./scripts/run-docker-timing.sh --cpus 2,4 --memory 2gas the way to reproduce it. That script builds the Dockerfile, and an image built frommainreports Node.js v26.10.0. The Dockerfile's own header, ADR 16, the runbook, the study script and CI still said Node.js 24. Node.js 26 is also not a long-term support line yet: nodejs.org lists v26.10.0 withlts: false, and the Node.js release schedule makes it one on 28 October 2026.summary.csvwas written with CR LF line endings, unlikeruns.csvand unlike the copy stored in git, so running the recorded report command on the committed run did not reproduce that file byte for byte.What changed
Dockerfile: the Node.js stage isnode:24-trixie-slimagain, at the digest that the published run recorded indata/runs/20261002T211256Z-docker/environment.txt(Docker Hub still serves that digest for the tag). The published results, the committed run data and CI'snode-versionare unchanged..github/dependabot.yml: for the Docker image, Dependabot ignores Node.js 25 and later and Python 3.13 and later, which leaves it the newer digests of the two lines the results were measured with.tests/integration/test_versions.py(new, runs withmake integrationin the existingworkersjob; it only reads files): takes the Node.js and Python lines from the Dockerfile'sFROMlines and fails when another place names a different one: the Dockerfile header, the workflow,pyproject.toml, the requirements headers, the study script, the runbook, ADR 9 and 16,study.mdand the README. It also checks Dependabot's bounds against the Dockerfile, the oldest supported Node.js acrosspackage.json, CI, the study script and the README, and that the Dockerfile's base image tags are the ones the published Docker run recorded. It compares version lines and tags, not patch releases or digests.pyproject.toml: ruff'starget-versionispy312. No code needed rewriting.analysis/greenbench_analysis/report.py:summary.csvlines end with LF; the test reads the file as bytes and checks it.README.md: the Algorithm-Energy-C link goes to the tree at0bf73c8, the last commit onmainbefore greenbench was merged; the testing section describes the version test, says that it does not compare digests, and says that CI does not build the Docker image.docs/decisions.md: ADR 16 has a status note with what happened, what the version test does and does not compare, and the date Node.js 26 becomes LTS.How it was verified
Everything below ran locally in Docker (Docker Desktop 4.93.0, engine 29.8.1, on Windows 11) on 4 October 2026. In review the same checks were run again, except actionlint, the Python 3.14 commands and the Node.js 18 and 20 tests, which CI ran. CI run 37216337524, on commit 6b5ad5f, finished with all eleven jobs successful (158 integration tests; 107 Python tests on 3.12 and on 3.14; 30 Node.js tests). The last commit, b515f0d, changes only the wording of
README.mdanddocs/decisions.md; the version tests,make integration,make check-pythonandmake lint-shellpass on it locally, and its CI run, 37218096304, also finished with all eleven jobs successful.docs/results.mdnames. Built frommain: Node.js v26.10.0.makeandmake testwith gcc and with clang;make sanitize;make integration PYTHON=python(158 passed: the 130 onmainand 28 new cases);make smoke PYTHON=python;make check-python PYTHON=python(ruff, ruff format, mypy, 107 tests);make check-node(npm ci, ESLint, tsc, 30 tests);make lint-shell(ShellCheck 0.10.0). actionlint 1.7.12 from its image: clean.python:3.14-slim-trixie): pass.node --teston Node.js 18.20.8 and 20.20.2: 30 tests pass on each.test_versions.pyrun againstmainfails in 13 cases (the Node.js line, ruff's target, the missing Dependabot bounds, the base image tags), and thesummary.csvassertions fail againstmain'sreport.py.data/runs/20261002T211256Z-docker/, reproducesREADME.md,docs/results.md, both charts andsummary.csvbyte for byte. Onmainthe first four already matched andsummary.csvdid not.docker run --rm -v "$PWD/results:/work/results" <image>, as in the README, writes the smoke report, and itsmeta.jsonrecords Node.js v24.21.0.scripts/run-docker-timing.sh --rehearse --cpus 2,4 --memory 2gcompletes (run from a temporary copy with other image and container names, because the machine was shared). Itsenvironment.txtrecords the same two base images as the published run, and itsmeta.jsonthe same compiler and interpreter versions..github/dependabot.ymlvalidates against the Dependabot schema (check-jsonschema 0.38.2,vendor.dependabot).ghcr.io/dependabot/dependabot-updater-docker(digestsha256:6ba99ff33a22…) on this branch's Dockerfile. With this branch'sdependabot.ymlit reportsnode24-trixie-slimas up to date and proposes only the newer digest ofpython:3.12-slim-trixie. Withmain'sdependabot.ymlit proposesnode26-trixie-slimandpython3.14-slim-trixie.3.14-slim-trixie,3.13-slim-trixieand3.12-slim-trixietags "due to cooldown period" and reported no update for Python. Without the Python bound, the update checker proposes3.14-slim-trixie(the item above).Not verified:
dependabot.ymlon GitHub's side. Its next weekly run will show the same or not. If another line gets through, the version test fails on that pull request.Left alone, and why
@types/node26.6.3 (build(deps-dev): Bump @types/node from 24.13.6 to 26.6.3 in /workers/node in the node-dev-tools group #4). The type definitions are now for Node.js 26 while CI checks and tests on Node.js 24, 20 and 18. Lint and type-check pass, and the worker tests pass on all three, so I did not revert it or add a rule for it.python:3.12-slim-trixiethan the one pinned, and it holds Python 3.12.15, where the pinned digest and the published results have 3.12.14. The pinned one is what the published run recorded, so I left the update to Dependabot, whose update checker proposes it (see above). Merging such a refresh changes the patch release thatrun-docker-timing.shmeasures, and neither CI nor the version test objects: the test compares lines and tags on purpose. Whether to take digest refreshes while the published results name 3.12.14, or to hold the digests until the study is measured again, is a separate choice that I have left open; ADR 16 and the README now say what the test does not cover.ubuntu-latest: an annotation on the latest CI run onmainsays that the label moves to Ubuntu 26 from 19 October 2026. I built and tested the C code, ranmake sanitizeand ran ShellCheck inubuntu:26.04(GCC 15.2.0, Clang 21.1.8, ShellCheck 0.11.0), and all pass, so I left the runner label as it is.🤖 Generated with Claude Code