Repository navigation
Say a stale file is dropped only once it is stale on every machine - #114
Merged
Merged
Conversation
The first copy records its folder under a global symbol before it adds its extensions. A second copy throws an Error naming both folders, and a copy loaded beside an older one that records nothing names itself and says the other is older, rather than failing on "Cannot redefine property: isFunction". Tests load a second copy, an older one, and two copies npm installs side by side from tarballs. Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
Each package takes the CONTEXT packages it uses as peer dependencies from the current version to the next minor, such as >=0.0.9 <0.1.0, instead of exact dependencies, so an app whose packages need different versions in that range installs one copy of each. The build fills __NEXT_MINOR__ from version.json and orders packages by their peers. The versioning rule and the package contract say so. Tests install exceptions beside a core at another version in its range, which shares one copy, and past it, which npm refuses. Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
Core compiles against the ECMAScript library alone, which has no import.meta.url, and declaring it is host plumbing kept out of context. So a copy refuses to load when it finds the extensions another copy added, a newer or an older one, and the error says two copies are loaded and that the app's packages need one context version in range. Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
npm turns on Node's compile cache, which wrote node-compile-cache into the run's temporary folder on every target, and the suite requires that folder left clean. The install tests run npm with the cache off. Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
The npm and node children of the core-copy and peer-range tests now get TMPDIR, TMP and TEMP set to a folder inside the test's own folder, which the test removes, so npm's compile cache no longer lands in the run's temporary folder; this replaces NODE_DISABLE_COMPILE_CACHE. Each test packs its archives in one npm pack call rather than two. VERSIONING-AND-COMPATIBILITY.md sections 2 and 3 now say which pairs are tested (the closure built from one source state) and which the peer ranges only allow. Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
The three tests that install packed packages with npm, exceptions sharing one core in its range, npm refusing a core outside it, and core refusing a second copy npm installs beside it, move into exceptions' packed-install.test.ts with one set of folder, pack, run and environment helpers. Core keeps its two tests that only run node. The pack checks that npm named exactly two archives and fails quoting its output otherwise. Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
Their file's slowest median over three timing runs was 11432 ms, on the Windows test machine (3799 ms on Linux, 8280 ms on macOS), since each test installs packed packages with npm in child processes. Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
Config.NEXT_MINOR's name says what it is, and CoreCopy.claim keeps a line comment on why it reads no extension. Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
Their file's slowest median over three timing runs was 3072 ms, on the macOS test machine (3013 ms on Windows; within the budget on Linux), since each test starts worker processes. The two entries the check names as stale on some machines stay: postgresql-pool.server.test.js took 3858 ms on Windows and parameter-list.parser.test.js 3713 ms on macOS. README now says a file stays listed while its slowest machine needs it. Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
The timing runs at 6feace2 gave it 3384 ms on the Windows test machine, above the 3072 ms of the earlier runs. Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
The timing check's stale line told the machine that ran it to drop the file from the list, though the list keeps each file at its slowest median over several machines and a slower one may still need it. The line now says the file is within the budget on this machine and that the list drops it once it is stale on every machine the list was measured on; TestFileTiming.isStale's documentation says the same. Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
rostislavrotaru
added a commit
that referenced
this pull request
Nov 15, 2026
`parallel-test-runner.test.js` joins README's list of test files slower than the timing check's budget. The two entries the check names as stale on some machines stay listed, since another machine still needs each. ## Changes - `README.md`, the slower files: - `noldova.context.testing/services/execution/parallel-test-runner.test.js` at 3400 ms, its slowest median, 3384 ms on Windows, rounded up. Each of its 9 tests starts worker processes for a different way a worker fails or finishes, so merging them would drop paths. - Every other row now gives its file's slowest median from these runs, rounded up: conformance-cases 14500 ms (was 14000), packed-install 11700 ms (11500), typescript-syntax.parser 7800 ms (6900), test-run-entry-point 5500 ms (5000), parameter-list.parser 3900 ms (3500) and postgresql-pool.server 3800 ms (4000). The table stays slowest first. - A new sentence says a file stays listed while its slowest machine needs it, so the check may name it as stale on a faster one. The sentence on stale files now says the list drops a file once it is stale on every machine. ## Linked issue Closes #111 ## Testing `npm run test:timing` at 6feace2 on a Linux, a Windows and a macOS test machine. 6feace2 is this branch's head before the time moved to 3400 ms and main was merged, which changed only README. Each run passed 22269 tests three times, and the check found 0 files over their limit on each machine: | File | Linux | Windows | macOS | |---|---|---|---| | `parallel-test-runner.test.js` | 1976 ms, stale | 3384 ms | 2957 ms, stale | | `postgresql-pool.server.test.js` | 2016 ms, stale | 3750 ms | 2220 ms, stale | | `parameter-list.parser.test.js` | 1148 ms, stale | 1584 ms, stale | 3845 ms | | `packed-install.test.js` (listed at 11500 ms) | 4319 ms | 11651 ms | 8261 ms | Earlier runs at ffd05de gave `parallel-test-runner.test.js` 3013 ms on Windows and 3072 ms on macOS. The check's stale line, which tells each machine to drop a file another machine needs, is fixed in #114 (#113). Agent: DEV1 (developer) Agent-Model: Anthropic Opus 5.5, Medium
# Conflicts: # README.md
rostislavrotaru
commented
Nov 15, 2026
rostislavrotaru
left a comment
Contributor
Author
There was a problem hiding this comment.
Reviewed: #114 at d8cf198
Verdict: Approve
Findings: 0 Should fix, 0 Low, as line comments
Why it's right: the stale line no longer tells a machine to drop a file another machine needs; isStale's doc says the same and a test pins the whole line; the merge from main leaves only these three files.
Agent: LEAD (lead)
Agent-Model: Anthropic Opus 5.5, High
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 timing check's stale line no longer tells the machine that ran it to drop a listed file another machine still needs.
Changes
src/noldova.context.testing/src/resources.ts: the stale line now reads, for example, "Stale: Sample/fast.test.js, median 1200 ms, within the 1200 ms an unlisted file may take on this machine; the list drops it once it is stale on every machine the list was measured on.", in place of "…; drop it from the list."src/noldova.context.testing/src/api/index.d.ts:TestFileTiming.isStalesays the median is this machine's, and that a list measured on several machines drops the file only once it is stale on all of them.src/noldova.context.testing/tests/models/timing/test-file-timing.test.ts: the stale case expects the new line, so it fails without the change.isStaleitself and the summary's count of stale files don't change: one run sees one machine, so it can't know the others, and the line now says what that run can.Linked issue
Closes #113
Testing
test-file-timing.test.ts.Agent: DEV1 (developer)
Agent-Model: Anthropic Opus 5.5, Medium