Repository navigation
A run that will outgrow its memory setting says so first, the race job names its machine, golang.org/x/net 0.62.0 - #215
Conversation
Part 2 of the race detector job has run past its twenty minutes in about one run of three, while the other parts of the same runs took their usual time. The log does not say what the machine was, so a slower machine and something inside the part could not be told apart. Each part now prints its processors, their model and the memory before the tests, and after them how the machine's processor time was spent while the tests ran (busy, idle, waiting on the disk, taken by the host) and which processes still running have used the most of it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two published advisories name golang.org/x/net 0.60.0 (GO-2026-6860 and GO-2026-6866), both in its html package. The window links that package only through the toolkit's SVG reader, govulncheck finds neither in code it reaches, and the command line tool does not link golang.org/x/net at all, so no generated file changes. The licence file is byte for byte the same. Among the packages the window links, only html/parse.go and html/render.go changed. No module entered or left the graph, and golang.org/x/text and golang.org/x/sys stay where they were. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Walkthrough
Merge Risk:
|
Three advisories published against mcp 1.29.0 are fixed in 1.30.0, and every semgrep release, 1.183.0 included, asks for mcp==1.29.0. Nor can the package be left out: semgrep's command line imports it when it starts. Two are about the MCP client and one about an MCP server checking bearer tokens. The CI job runs semgrep scan and nothing else, which starts neither. The entries end on 2026-11-15 with the two already there, so all of them come back on one reminder. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A run holds its whole plan to the end, and every file adds its answer and its manifest entry as it finishes, about 520 B in each of the five formats measured. The plan is weighed while it is built and what the files add was not, so 600 000 text files in a container of 1 GB passed every check, wrote for fifteen minutes and were ended by the system with nothing said and no manifest. With Docker's default swap the same run finished. engine.PredictHold works out the heap as the run starts plus what its files will add, against what the memory setting gives the run. The command line prints a note before the first byte, dry runs included, because a process the system ends prints nothing afterwards. The window says the same after a preview and after a run. A note and not a refusal: whether such a run is ended depends on swap the program cannot see. Three guards: the command line under --memory 1mb and 64gb, the window on a machine of 2 MiB and of 16 GB, and the forecast's 520 B against what a run of 2000 files adds to the heap, measured in a process of its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
iowait is time the processors sat idle while disk I/O was pending, not time a test waited for the disk. steal depends on the platform and Microsoft documents it as not applicable to Azure, so nought there proves nothing about the host. The process list ranks by processor time since each process started, which ELAPSED dates. The labels now say so. The changelog entry for golang.org/x/net no longer joins two sentences with a comma. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* ci: the race job lays its guards out by what each weighs The steps added in #215 named the processor of every race part. The same part 2 took 1202 s on an AMD EPYC 7763, past its twenty minute timeout, and 689 s on an EPYC 9V45, every test of it slower by the same factor, while part 3 took 525 and 530 s on two 7763s. Split by the checksum of each name, the four parts were about 1250, 1158, 795 and 526 s on the 7763. .github/race-weights holds the 48 guards that took 10 s or more, each at the longest time any of eight parts took, and the mean of the rest. .github/scripts/race_parts.py lays those out heaviest first, each into the lightest part, over the light guards, which stay on the checksum so adding one moves no other. By the measured times the parts are now 912 to 961 s on the slowest processor. A weight for a test the binary does not list fails every part, and a test missing from the weights that runs 60 s or more fails its part with the line to add. The race job now also runs when either file changes. Five guards in raceparts_test.go: every guard in exactly one part, checked against the binary's own -test.list; the parts within a tenth of their mean and under 85% of the timeout read from ci.yml; the refusals; the unlisted check; and the job's use of both. Thirteen mutation entries. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * ci: the race split reads only the durations go test writes, and its guards handle every parse error A log line whose duration is not one go test writes is passed by rather than ending the unlisted check with a traceback, and a file that cannot be read says so in a sentence. The guards fail on a timeout or an unlisted weight that is not a number instead of reading it as nought. The mutation entry for the missing unlisted line now changes only that refusal, and a new one covers the duration pattern. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Summary
engine.PredictHoldadds the heap as the run starts to what its files will add, against the setting. The command line prints anote:line before writing, dry runs included. The window says the same after Preview and after a run. It is a note and not a refusal, because the same run finished where the container had swap.golang.org/x/net0.62.0 for GO-2026-6860 and GO-2026-6866 in itshtmlpackage. Only the window links that package, govulncheck finds neither in code it reaches, and the command line tool does not linkgolang.org/x/net. No generated file changes.mcp1.29.0 under semgrep get the same dated exception as the one already there. Every semgrep release pins that version, semgrep cannot start without the package, and the CI job runs onlysemgrep scan.Test plan
TestARunThatWillHoldMoreThanItsMemorySaysSoBeforeItsFirstByte,TestTheWindowSaysWhenARunWillHoldMoreThanItsMemory,TestAFileAddsWhatTheForecastSaysToTheRunsMemory(in a process of its own). Each mutation entry for them was red on its mutant before commit.ubuntu:24.04.🤖 Generated with Claude Code