Preserve old-style test dependency floors in downgrade tests#119
Preserve old-style test dependency floors in downgrade tests#119ChrisRackauckas-Claude wants to merge 2 commits into
Conversation
Keep floor-resolved test extras reachable through build and Pkg.test, while preserving source/no-promote exclusions and restoring each Project.toml byte-for-byte. Add cross-version sandbox, cleanup, and workflow synchronization coverage. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
|
Validation for head
The external action itself was not modified. The pre-fix controls and fleet exposure are archived in the broader SciML downgrade audit. |
|
Checked after the one-hour no-poll boundary at 2026-07-21 21:44:43 EDT. PR #119 remains a draft at exact head Exact-head run
The first job's name is narrower than its command: it runs the complete |
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
|
Addendum for commit 4d16630: The reusable downgrade workflow previously exported an empty GROUP whenever the caller omitted the optional group input. Packages that use a raw environment default such as get(ENV, "GROUP", "All") therefore selected no test group. The workflow now exports GROUP only when the caller supplied a nonempty value, preserving each package default otherwise. Local validation on the exact committed tree:
Hosted checks for this new head are still pending. |
|
Hosted CI is terminal for head 4d16630 after the conservative no-poll window. All required checks passed:
Run: https://github.com/SciML/.github/actions/runs/29885291362 The PR remains draft/open, mergeable, and CLEAN. |
Problem
While auditing released SciML packages for minimum-compatible downgrade correctness, I found that
julia-actions/julia-downgrade-compat@v2resolves old-style[extras]/[targets].testdependencies into the root Manifest, but ordinaryPkg.testcan replace those orphaned floor entries inside its sandbox.The deterministic control reproduced on Julia 1.10.11 and 1.12.6:
Pkg.test(allow_reresolve=false)sandbox: DataStructures 0.18.22This matters broadly: the current released-package inventory contains 1,351 registry-backed test extras across 232 projects / 117 repositories after the deliberate source and Mooncake exclusions. It also exposed a real masked ADTypes floor failure.
Changes
[targets].test ∩ [extras]into the active project's[deps].no_promoteand[sources]exclusions.[weakdeps].always()cleanup step.test/Project.tomlhandling unchanged.mode/no_promoteinputs.Tests
The workflow-embedded Julia source is exercised directly by the repository self-tests and asserted identical in both reusable workflows.
test/runtests.jlpassed.test/runtests.jlpassed.[sources]andno_promote,@.and nested projects, new-style no-op behavior, exact restoration on success/failure, and a realPkg.build→Pkg.testlocked-floor sandbox.git diff --check: pass.Local evidence hashes:
38ddbb3d1c07e9fd06a99ae53f3b47fac87deb7804852a670bd10e733a6a94e2ece87b4eff0ba2c4446db191b70c6baced6ac3583c0ca5da5e8bb985746a7a4ee3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855Process notes
I read the exact action implementation at
fab1defb76df9fd672f63c94df73ce131d32e134, traced Julia Pkg's sandbox preservation behavior, reproduced the false green before changing the workflow, validated the production ordering on both supported Julia lines, and then had the final patch reviewed independently. That review caught and removed one non-public test helper and prompted explicit restoration/new-style coverage before this commit was published.