Skip to content

Fix the QA regression from #76 and drop the dead TruncatedStacktraces dependency - #80

Closed
ChrisRackauckas-Claude wants to merge 2 commits into
SciML:mainfrom
ChrisRackauckas-Claude:agent/restore-qa-ignores
Closed

Fix the QA regression from #76 and drop the dead TruncatedStacktraces dependency#80
ChrisRackauckas-Claude wants to merge 2 commits into
SciML:mainfrom
ChrisRackauckas-Claude:agent/restore-qa-ignores

Conversation

@ChrisRackauckas-Claude

@ChrisRackauckas-Claude ChrisRackauckas-Claude commented Jul 28, 2026

Copy link
Copy Markdown
Member

Ignore this PR until it has been reviewed by @ChrisRackauckas.

The regression

The QA group has been failing on main since 2026-07-22. #76 ("Migrate QA to SciMLTesting 2.4") replaced the entire run_qa(...) call with a bare one-liner, and in doing so silently dropped the all_qualified_accesses_are_public ignore list that came with it:

-        all_qualified_accesses_are_public = (;
-            ignore = (:tail, :FunctionWrapper, Symbol("@truncate_stacktrace")),
-        ),
+run_qa(FunctionWrappersWrappers)

Reproduced on a clean checkout of main (588bcb7, unmodified), Julia 1.12:

$ GROUP=QA julia --project=. -e 'using Pkg; Pkg.test()'
  NonPublicQualifiedAccessException
  - `@truncate_stacktrace` is not public in `TruncatedStacktraces` … src/FunctionWrappersWrappers.jl:226:23
  - `FunctionWrapper` is not public in `FunctionWrappers`         … src/FunctionWrappersWrappers.jl:286:26
QA | 19 passed, 1 errored, 20 total

This is invisible to Pkg.test(), which runs the curated default group — QA is not part of it.

Commit 1 — restore the ignores

Puts the dropped entries back, which makes the group pass again. :tail is deliberately not restored: Base.tail is no longer reached and ExplicitImports does not flag it.

Commit 2 — remove the need for one of them entirely

Rather than carry @truncate_stacktrace as a permanent exception, the dependency goes away, because it has never done anything in this package.

TruncatedStacktraces sets:

const DISABLE = @load_preference("disable", true) || VERSION  v"1.10"

and the macro body is @static if !DISABLE. So on Julia ≥ 1.10 it expands to nothing — and 1.10 is this package's floor (julia = "1.10"). The version clause cannot be overridden by the preference, so the Base.show method the macro is meant to define has never existed on any Julia we support.

Verified rather than assumed:

VERSION = 1.12.4
shown   = FunctionWrappersWrapper{Tuple{FunctionWrapper{Float64, Tuple{Float64, Float64}}}, AllowNonIsBits, FunctionWrappersWrappers.SingleCacheStorage}
truncated (contains …): false
show methods from FWW: 0

Zero Base.show methods contributed, type prints in full. Dropping the dep is a strict no-op that also sheds a dependency on an archived, unmaintained package.

Worth noting this was the only option available for that name: SciML/TruncatedStacktraces.jl is archived and read-only (last push 2024-07-31), so @truncate_stacktrace cannot be exported or made public at its source — GitHub rejects PRs against it outright.

What is left

Only FunctionWrappers.FunctionWrapper, and it now has a path out: JuliaLang/FunctionWrappers.jl#35 marks it public. Once that is released and the compat floor raised, the last ignore can go and run_qa(FunctionWrappersWrappers) can return to the bare form #76 intended.

Validation

$ GROUP=QA julia --project=. -e 'using Pkg; Pkg.test()'
QA            |   20     20  29.3s
     Testing FunctionWrappersWrappers tests passed

$ julia --project=. -e 'using Pkg; Pkg.test()'      # default group, no TruncatedStacktraces
FunctionWrappersWrappers.jl |   78     78   4.4s
BigFloat + UnionAll         |    7      7   0.8s
Enzyme                      |   68     68  1m02.7s
Mooncake                    |   13     13  1m02.6s
     Testing FunctionWrappersWrappers tests passed

Runic 1.7.0 --check exits 0. Patch bump to 1.11.1.

Unrelated hygiene note

.gitignore only covers the root /Manifest.toml, not the per-group ones under test/*/. Those are generated and untracked, so a careless git add -A picks them up. Not fixed here to keep this PR focused, but worth a one-line follow-up.

Links

SciML#76 replaced the whole `run_qa(...)` call with a bare
`run_qa(FunctionWrappersWrappers)`, which silently discarded the
`all_qualified_accesses_are_public` ignore list it carried. The QA group has
errored on `main` ever since with `NonPublicQualifiedAccessException` for
`FunctionWrappers.FunctionWrapper` and
`TruncatedStacktraces.@truncate_stacktrace`.

This is invisible to `Pkg.test()`, which runs the curated default group; QA is
not part of it.

`:tail` is not restored: `Base.tail` is no longer reached, and ExplicitImports
does not flag it.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
`@truncate_stacktrace` cannot fire in this package. TruncatedStacktraces sets
`DISABLE = @load_preference("disable", true) || VERSION >= v"1.10"`, and the
macro body is wrapped in `@static if !DISABLE`, so on Julia 1.10 and later it
expands to nothing — and 1.10 is this package's floor. The `Base.show` method it
is supposed to define has never existed on any Julia version we support, and the
preference cannot override the version clause.

Verified: `FunctionWrappersWrapper` contributes zero `Base.show` methods, and
its type prints in full with no truncation.

That makes the dependency dead weight, and it was the only reason the QA suite
needed a `@truncate_stacktrace` ignore. Removing it is better than either
ignoring the access or promoting the name upstream — the latter is impossible
in any case, since SciML/TruncatedStacktraces.jl is archived and read-only.

Only the `FunctionWrapper` ignore remains, and that one has a path out now:
JuliaLang/FunctionWrappers.jl#35.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas-Claude ChrisRackauckas-Claude changed the title Restore the ExplicitImports ignores dropped in #76 Fix the QA regression from #76 and drop the dead TruncatedStacktraces dependency Jul 29, 2026
@ChrisRackauckas
ChrisRackauckas marked this pull request as ready for review July 29, 2026 02:31
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member Author

#79 was squash-merged, and because #79 was stacked on this branch, that merge carried this PR's entire contents to main along with it:

  • test/qa/qa.jl — the restored all_qualified_accesses_are_public ignore list ✅ on main
  • src/FunctionWrappersWrappers.jl + Project.toml — the dead TruncatedStacktraces dependency removed ✅ on main
  • version bumped to 1.11.1 ✅ on main

Diffing this branch against current main confirms it contributes nothing — the only differences are things main has that this branch lacks (the #79 docstring and the #78 Documenter bump):

$ git diff origin/main agent/restore-qa-ignores --stat
 docs/Project.toml               |  1 -
 src/FunctionWrappersWrappers.jl | 44 -----------------------------------------

So rebasing would just produce an empty PR. Closing as delivered via #79.

One correction did come out of the re-check: the ignore comment that landed references JuliaLang/FunctionWrappers.jl#41, which does not exist — a placeholder I wrote before opening the upstream PR. The real one is #35. Fixed in #81.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants