# CompatHelper PRs failing with force\_latest\_compatible\_version due to Julia version constraints

**URL:** <https://discourse.julialang.org/t/compathelper-prs-failing-with-force-latest-compatible-version-due-to-julia-version-constraints/135079>\
**Category:** Package Management\
**Tags:** compathelper\
**Created:** [January 15, 2026, 2:11pm UTC](https://discourse.julialang.org/t/compathelper-prs-failing-with-force-latest-compatible-version-due-to-julia-version-constraints/135079 "2026-01-15T14:11:52Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![chriswaudby](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chriswaudby/32/26574_2.png) [@chriswaudby](https://discourse.julialang.org/u/chriswaudby)\
**Post date:** [January 15, 2026, 2:11pm UTC](https://discourse.julialang.org/t/compathelper-prs-failing-with-force-latest-compatible-version-due-to-julia-version-constraints/135079/1 "2026-01-15T14:11:52Z")

</div>

I’m stuck on an issue with CompatHelper PRs failing CI and not sure the best way to fix it.

My package has:

```julia-auto
julia = "1.9"
Peaks = "0.5, 0.6"

```

Peaks 0.5 works on Julia 1.9, but Peaks 0.6 requires Julia 1.10+.

In my normal CI testing, Peaks 0.5 is selected for Julia 1.9, and Peaks 0.6 is selected on Julia 1.10+. Everything works fine.

But CompatHelper PRs fail on Julia 1.9 with:

```julia-auto
ERROR: Unsatisfiable requirements detected for package Peaks [18e31ff7]:
 ...
 ├─restricted to versions 0.6 by an explicit requirement
 └─restricted by julia compatibility requirements to versions: 0.1.0-0.5.3 — no versions left

```

It seems like `force_latest_compatible_version=true` (auto-enabled for CompatHelper PRs) tries to force Peaks 0.6 even though it’s incompatible with Julia 1.9.

What’s the right approach here?

---

<div class="post-metadata">

**Author:** ![dilumaluthge](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dilumaluthge/32/29283_2.png) [@dilumaluthge](https://discourse.julialang.org/u/dilumaluthge)\
**Post date:** [January 15, 2026, 6:33pm UTC](https://discourse.julialang.org/t/compathelper-prs-failing-with-force-latest-compatible-version-due-to-julia-version-constraints/135079/2 "2026-01-15T18:33:25Z")

</div>

`julia-runtest` has an option for overriding the value of `force_latest_compatible_version`. You could set it to `false` for Julia 1.9, and `auto` for later Julia versions.

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [January 19, 2026, 6:01pm UTC](https://discourse.julialang.org/t/compathelper-prs-failing-with-force-latest-compatible-version-due-to-julia-version-constraints/135079/3 "2026-01-19T18:01:08Z")

</div>

I seem to have this problem on later Julia versions too, and with Dependabot. See e.g. [Update ComponentArrays requirement to 0.15.30 in /docs · JuliaDecisionFocusedLearning/ImplicitDifferentiation.jl@f4f34a1 · GitHub](https://github.com/JuliaDecisionFocusedLearning/ImplicitDifferentiation.jl/actions/runs/20862093630/job/59944085255?pr=198).

---

<div class="post-metadata">

**Author:** ![dilumaluthge](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dilumaluthge/32/29283_2.png) [@dilumaluthge](https://discourse.julialang.org/u/dilumaluthge)\
**Post date:** [January 19, 2026, 8:56pm UTC](https://discourse.julialang.org/t/compathelper-prs-failing-with-force-latest-compatible-version-due-to-julia-version-constraints/135079/4 "2026-01-19T20:56:53Z")

</div>

You can conditionally disable `force_latest_compatible_version` on older Julia versions by eg:

```yaml
- uses: julia-actions/julia-runtest@...
  with:
    # Disable force_latest_compatible_version on Julia 1.9
    # Keep it enabled for later Julia versions
    force_latest_compatible_version: ${{ matrix.julia-version == '1.9' && 'false' || 'auto' }}

```

Assuming that your matrix has a variable named `julia-version`, eg:

```yaml
      matrix:
        julia-version:
          - '1.9'
          - '1.10'
          - '1.11'
          - '1.12'

```

* * *

You can completely disable `force_latest_compatible_version` with eg:

```yaml
- uses: julia-actions/julia-runtest@...
  with:
    force_latest_compatible_version: false

```

---

<div class="post-metadata">

**Author:** ![dilumaluthge](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dilumaluthge/32/29283_2.png) [@dilumaluthge](https://discourse.julialang.org/u/dilumaluthge)\
**Post date:** [January 19, 2026, 8:57pm UTC](https://discourse.julialang.org/t/compathelper-prs-failing-with-force-latest-compatible-version-due-to-julia-version-constraints/135079/5 "2026-01-19T20:57:10Z")

</div>

@gdalle In your case, you can try completely disabling `force_latest_compatible_version`.

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [January 19, 2026, 9:04pm UTC](https://discourse.julialang.org/t/compathelper-prs-failing-with-force-latest-compatible-version-due-to-julia-version-constraints/135079/6 "2026-01-19T21:04:30Z")

</div>

I just tried it and then rebased the dependabot PR, same issue.  
What’s even weirder is that it’s a docs Project update, but it’s the tests that fail.

> <https://github.com/JuliaDecisionFocusedLearning/ImplicitDifferentiation.jl/pull/194>
>
> Updates the requirements on \[Literate\](https://github.com/fredrikekre/Literate.j…l) to permit the latest version.
> \<details\>
> \<summary\>Release notes\</summary\>
> \<p\>\<em\>Sourced from \<a href="https://github.com/fredrikekre/Literate.jl/releases"\>Literate's releases\</a\>.\</em\>\</p\>
> \<blockquote\>
> \<h2\>v2.21.0\</h2\>
> \<p\>See \<a href="https://github.com/fredrikekre/Literate.jl/blob/master/CHANGELOG.md"\>\<code\>CHANGELOG.md\</code\>\</a\> for notable changes.\</p\>
> \<p\>See \<a href="https://github.com/fredrikekre/Literate.jl/blob/master/CHANGELOG.md"\>\<code\>CHANGELOG.md\</code\>\</a\> for notable changes.\</p\>
> \<p\>\<a href="https://github.com/fredrikekre/Literate.jl/compare/v2.20.1...v2.21.0"\>Diff since v2.20.1\</a\>\</p\>
> \</blockquote\>
> \</details\>
> \<details\>
> \<summary\>Changelog\</summary\>
> \<p\>\<em\>Sourced from \<a href="https://github.com/fredrikekre/Literate.jl/blob/master/CHANGELOG.md"\>Literate's changelog\</a\>.\</em\>\</p\>
> \<blockquote\>
> \<h2\>\[v2.21.0\] - 2025-11-19\</h2\>
> \<h3\>Changed\</h3\>
> \<ul\>
> \<li\>Allow IOCapture version 1. (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/280"\>#280\</a\>)\</li\>
> \</ul\>
> \<h2\>\[v2.20.1\] - 2024-10-17\</h2\>
> \<h3\>Fixed\</h3\>
> \<ul\>
> \<li\>Errors from code evaluation (with \<code\>continue\_on\_error = true\</code\>) are now properly displayed
> with \<code\>showerror\</code\>. (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/261"\>#261\</a\>)\</li\>
> \</ul\>
> \<h2\>\[v2.20.0\] - 2024-10-16\</h2\>
> \<h3\>Added\</h3\>
> \<ul\>
> \<li\>A new keyword argument configuration \<code\>continue\_on\_error::Bool = false\</code\> has been added
> which controls the behavior of code execution errors. By default (\<code\>continue\_on\_error = false\</code\>) execution errors are re-thrown by Literate (as before). If \<code\>continue\_on\_error = true\</code\> is set the error is used as the block result and execution continues with following
> blocks. (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/201"\>#201\</a\>, \<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/257"\>#257\</a\>)\</li\>
> \<li\>Literate now replaces Documenter-style admonitions when generating notebook output
> (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/259"\>#259\</a\>). Concretely,
> \<pre\>\<code\># !!! note
> \# A note.
> \<h1\>!!! warn &quot;Warning title text&quot;\</h1\>
> \<h1\>A warning.\</h1\>
> \<p\>\</code\>\</pre\>
> is replaced with\</p\>
> \<pre\>\<code\># &gt; \*\*Note\*\*
> \# &gt;
> \# &gt; A note.
> 
> \# &gt; \*\*Warning title text\*\*
> \# &gt;
> \# &gt; A warning.
> \</code\>\</pre\>
> \</li\>
> \</ul\>
> \<h2\>\[v2.19.1\] - 2024-09-13\</h2\>
> \<h3\>Fixed\</h3\>
> \<ul\>
> \<li\>Set \<code\>:SOURCE\_PATH\</code\> in the task local storage to the output file when executing code so
> that recursive \<code\>include\</code\> works as expected. (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/251"\>#251\</a\>, \<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/252"\>#252\</a\>)\</li\>
> \</ul\>
> \<h2\>\[v2.19.0\] - 2024-07-11\</h2\>
> \<h3\>Changed\</h3\>
> \<ul\>
> \<li\>\<code\>Literate.markdown\</code\>, \<code\>Literate.notebook\</code\>, and \<code\>Literate.script\</code\> are marked as \<code\>public\</code\> in
> Julia version that support the \<code\>public\</code\> keyword. (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/248"\>#248\</a\>)\</li\>
> \</ul\>
> \<h2\>\[v2.18.0\] - 2024-04-17\</h2\>
> \<h3\>Added\</h3\>
> \<ul\>
> \<li\>Literate will now remove
> \<a href="https://github.com/JuliaDocs/DocumenterInterLinks.jl"\>DocumenterInterlinks.jl\</a\>\</li\>
> \</ul\>
> 
> \</blockquote\>
> \<p\>... (truncated)\</p\>
> \</details\>
> \<details\>
> \<summary\>Commits\</summary\>
> \<ul\>
> \<li\>\<a href="https://github.com/fredrikekre/Literate.jl/commit/a86869f703f513fe5050db405f3e98e3c7972e0c"\>\<code\>a86869f\</code\>\</a\> Release 2.21.0 (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/281"\>#281\</a\>)\</li\>
> \<li\>\<a href="https://github.com/fredrikekre/Literate.jl/commit/5b413653ffb3de544b525b82f6ca454c827a2413"\>\<code\>5b41365\</code\>\</a\> Support IOCapture 1.x (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/280"\>#280\</a\>)\</li\>
> \<li\>\<a href="https://github.com/fredrikekre/Literate.jl/commit/8bde981f3520332e6dd1debf42bff42d8cee6fa8"\>\<code\>8bde981\</code\>\</a\> Bump actions/checkout from 4 to 5 (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/279"\>#279\</a\>)\</li\>
> \<li\>\<a href="https://github.com/fredrikekre/Literate.jl/commit/da4c3841be3f06910675f13f37b2b0967b2229db"\>\<code\>da4c384\</code\>\</a\> Clarify return values. (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/277"\>#277\</a\>)\</li\>
> \<li\>\<a href="https://github.com/fredrikekre/Literate.jl/commit/0d308e4185c322092f0593765ae17acc7c8897a0"\>\<code\>0d308e4\</code\>\</a\> Update README links\</li\>
> \<li\>\<a href="https://github.com/fredrikekre/Literate.jl/commit/5ea086c75ee65829acd4b548d3dc5aebcd4b0585"\>\<code\>5ea086c\</code\>\</a\> Add formatting commit to blame ignore list\</li\>
> \<li\>\<a href="https://github.com/fredrikekre/Literate.jl/commit/5d1b4918b9f7b000aef1a094234c4d03539fa574"\>\<code\>5d1b491\</code\>\</a\> Apply Runic formatting (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/266"\>#266\</a\>)\</li\>
> \<li\>\<a href="https://github.com/fredrikekre/Literate.jl/commit/51cee5426fe7d74b0b6d94b8d0165296194f92f6"\>\<code\>51cee54\</code\>\</a\> Bump codecov/codecov-action from 4 to 5 (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/265"\>#265\</a\>)\</li\>
> \<li\>\<a href="https://github.com/fredrikekre/Literate.jl/commit/5c15d8865322a2b4225efa3a6bdf6f95439dcf70"\>\<code\>5c15d88\</code\>\</a\> Set version to 2.20.1.\</li\>
> \<li\>\<a href="https://github.com/fredrikekre/Literate.jl/commit/c4ac614a614c646c07e4e3090b0ba4844d3d6fe6"\>\<code\>c4ac614\</code\>\</a\> Use showerror for showing captured errors (\<a href="https://redirect.github.com/fredrikekre/Literate.jl/issues/261"\>#261\</a\>)\</li\>
> \<li\>Additional commits viewable in \<a href="https://github.com/fredrikekre/Literate.jl/compare/v0.1.0...v2.21.0"\>compare view\</a\>\</li\>
> \</ul\>
> \</details\>
> \<br /\>
> 
> 
> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting \`@dependabot rebase\`.
> 
> \[//\]: # (dependabot-automerge-start)
> \[//\]: # (dependabot-automerge-end)
> 
> \---
> 
> \<details\>
> \<summary\>Dependabot commands and options\</summary\>
> \<br /\>
> 
> You can trigger Dependabot actions by commenting on this PR:
> \- \`@dependabot rebase\` will rebase this PR
> \- \`@dependabot recreate\` will recreate this PR, overwriting any edits that have been made to it
> \- \`@dependabot merge\` will merge this PR after your CI passes on it
> \- \`@dependabot squash and merge\` will squash and merge this PR after your CI passes on it
> \- \`@dependabot cancel merge\` will cancel a previously requested merge and block automerging
> \- \`@dependabot reopen\` will reopen this PR if it is closed
> \- \`@dependabot close\` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
> \- \`@dependabot show \<dependency name\> ignore conditions\` will show all of the ignore conditions of the specified dependency
> \- \`@dependabot ignore this major version\` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
> \- \`@dependabot ignore this minor version\` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
> \- \`@dependabot ignore this dependency\` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
> 
> 
> \</details\>
