<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="350253" data-post-id="350253">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="cheerfulstoic" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cheerfulstoic/120/3870_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  cheerfulstoic
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="D4no0" data-post="10" data-topic="68207">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/d4no0/48/33624_2.png" class="avatar"> D4no0:</div>
<blockquote>
<p>I wonder if there is a language out there that solved this problem of “global” dependencies?</p>
</blockquote>
</aside>
<p>I was looking at <a href="http://rubygems.org" rel="noopener nofollow ugc">rubygems.org</a> at some of the more popular gems, and I see a bit of a mix, but there are a lot of <code>&gt;= x.y.z</code> (including some <code>... and &lt;= x.y.z</code>).  Definitely some <code>~&gt; x.y.z</code> and <code>~&gt; x.y</code>.  But I’m not sure how it compares to hex packages usage.  <code>rails</code>, of course, just ties each version to exact <code>= x.y.z</code> of it’s custom sub-dependencies (actioncable, actionpack, actionmailer, actionview, activestorage, etc…). Those sub-dependencies use a mix of <code>&gt;=</code> and <code>~&gt;</code>.</p>
<p>Maybe an interesting project to gather data from the two and compare usage <img src="https://forum.elixirforum.com/images/emoji/apple/thinking.png?v=15" title=":thinking:" class="emoji" alt=":thinking:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="350253" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/conflicting-dependencies-and-use-of-the-operator/68207/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-350253" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="350253"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="350255" data-post-id="350255">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="D4no0" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/D4no0/120/33624_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  D4no0
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="cheerfulstoic" data-post="12" data-topic="68207">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cheerfulstoic/48/3870_2.png" class="avatar"> cheerfulstoic:</div>
<blockquote>
<p>Definitely some <code>~&gt; x.y.z</code> and <code>~&gt; x.y</code>. But I’m not sure how it compares to hex packages usage. <code>rails</code>, of course, just ties each version to exact <code>= x.y.z</code> of it’s custom sub-dependencies (actioncable, actionpack, actionmailer, actionview, activestorage, etc…).</p>
</blockquote>
</aside>
<p>The actual version being used in elixir is also fixed and it’s located in <code>mix.lock</code>.</p>
<p>I was wondering more in terms of each library compiling with its own version of dependency, hence avoiding this game of having the right dependency for all libraries.</p>
<p>I know some java build tools experimented with this, but the wait time for the initial build without cache was about 30 minutes for a new project…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="350255" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/conflicting-dependencies-and-use-of-the-operator/68207/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-350255" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="350255"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="350259" data-post-id="350259">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="zachdaniel" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/zachdaniel/120/31980_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  zachdaniel
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Ash</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Along these lines, a common mistake in dependency listing is using <code>~&gt; 1.2.3</code> when you actually mean <code>~&gt; 1.2 and &gt;= 1.2.3</code>. Library authors will use <code>~&gt; 1.2.3</code> because they want to get some fix added in <code>1.2.3</code>, not realizing that they just prevented users of their library from upgrading to <code>1.3.0</code>.</p>
<p>I’m not sure how to solve that problem <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="350259" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/conflicting-dependencies-and-use-of-the-operator/68207/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-350259" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="350259"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="350260" data-post-id="350260">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="zachdaniel" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/zachdaniel/120/31980_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  zachdaniel
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Ash</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Made a PR to the library author guidelines with some of this in mind: <a href="https://github.com/elixir-lang/elixir/pull/14080" class="inline-onebox" rel="noopener nofollow ugc">Advise library authors on how best to depend on child dependencies by zachdaniel · Pull Request #14080 · elixir-lang/elixir · GitHub</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="350260" data-batch-url="/posts/batch_likers">
                        7
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/conflicting-dependencies-and-use-of-the-operator/68207/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-350260" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="350260"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="350269" data-post-id="350269">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><em>[sighs in Rust allowing multiple versions of the same library (crate) in a project]</em> <img src="https://forum.elixirforum.com/images/emoji/apple/point_right.png?v=15" title=":point_right:" class="emoji" alt=":point_right:" loading="lazy" width="20" height="20"> <a href="https://stackoverflow.com/questions/51714866/is-it-documented-that-cargo-can-download-and-bundle-multiple-versions-of-the-same-crate" rel="noopener nofollow ugc">https://stackoverflow.com/questions/51714866/is-it-documented-that-cargo-can-download-and-bundle-multiple-versions-of-the-same-crate</a></p>
<p>While I agree with <a class="mention" href="/u/zachdaniel" rel="nofollow">@zachdaniel</a> here and will not repeat his excellent suggestions, for the initial question at hand I believe that Elixir 1.18 having JSON functionality built-in will solve a lot of these headaches down the road… VERY down the road, likely 3-5 years from now though.</p>
<p>IMO the best we can do for now is start PRs to the affected libraries where these conflicts exist.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="350269" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/conflicting-dependencies-and-use-of-the-operator/68207/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-350269" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="350269"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="350278" data-post-id="350278">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="harrisi" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/harrisi/120/33003_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  harrisi
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>It also seems to me that having multiple versions is the only practical solution. You can’t tell if any two versions of a package have the same behavior automatically in general, so any kind of automated version resolution seems like a nonstarter.</p>
<p><s>There’s an open issue about this, for what it’s worth:</s></p>
<p><s><a href="https://github.com/elixir-lang/elixir/issues/12520" rel="noopener nofollow ugc">https://github.com/elixir-lang/elixir/issues/12520</a></s></p>
<p>EDIT: This isn’t a relevant issue. I misremembered and didn’t double check.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="350278" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/conflicting-dependencies-and-use-of-the-operator/68207/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-350278" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="350278"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="350332" data-post-id="350332">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ericmj" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ericmj/120/25920_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ericmj
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Elixir Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="cheerfulstoic" data-post="11" data-topic="68207">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cheerfulstoic/48/3870_2.png" class="avatar"> cheerfulstoic:</div>
<blockquote>
<p>Yeah, for sure… I guess that’s part of why I was trying to ephasize that one should <strong>prefer</strong> the use of <code>&gt;=</code> in a library, but I definitely wouldn’t say that you should <em>always</em> use it. I guess it feels like many people don’t think of it as an option, and so I worry about people not really thinking about it (and I get it, you’re trying to get your cool idea for a library out there in front of people)</p>
</blockquote>
</aside>
<p>The problem comes when an incompatibility is detected in the future and you need to constrain the version. You publish a new version of your library with the version requirement changed from <code>&gt;= 2.0.0</code> to <code>~&gt; 2.0</code>. However that wont help because the version solver will always attempt to find a matching version and will just pick the version before you added the stricter constraint.</p>
<aside class="quote no-group" data-username="cheerfulstoic" data-post="11" data-topic="68207">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cheerfulstoic/48/3870_2.png" class="avatar"> cheerfulstoic:</div>
<blockquote>
<p>But also perhaps some sort of tool that lets them know (as a library maintainer) when there is a new version of sub dependencies which aren’t being allowed (either as a part of <code>mix</code> somehow, or a bot that points in out in a pull request).</p>
</blockquote>
</aside>
<p>There is a tool for that: <code>mix hex.outdated</code>.</p>
<aside class="quote no-group" data-username="cheerfulstoic" data-post="11" data-topic="68207">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cheerfulstoic/48/3870_2.png" class="avatar"> cheerfulstoic:</div>
<blockquote>
<p>For <code>override</code>, I can see how either the documentation or the functionality could be improved as <span class="mention">@zackdaniel</span> outlined, though I’m not personally interested in tackling that problem.</p>
</blockquote>
</aside>
<p>Do you have suggestions on how to improve the documentation for override?</p>
<aside class="quote no-group" data-username="harrisi" data-post="17" data-topic="68207">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/harrisi/48/33003_2.png" class="avatar"> harrisi:</div>
<blockquote>
<p>It also seems to me that having multiple versions is the only practical solution. You can’t tell if any two versions of a package have the same behavior automatically in general, so any kind of automated version resolution seems like a nonstarter.</p>
<p>There’s an open issue about this, for what it’s worth:</p>
</blockquote>
</aside>
<p>You cannot use multiple versions of an OTP application in BEAM. That issue is only aiming to speed up compilation when switching between branches that are using different dependencies.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="350332" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/conflicting-dependencies-and-use-of-the-operator/68207/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-350332" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="350332"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="350335" data-post-id="350335">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ericmj" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ericmj/120/25920_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ericmj
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Elixir Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>When using a 5 year old library we shouldn’t be too surprised that things don’t fully work when used with libraries that have been kept up to date. In this case the solver couldn’t find a solution  because there were incompatible version constraints, it was discovered and could be fixed with <code>override: true</code>.</p>
<p>With conservative version requirements using <code>~&gt;</code> we can with the help of the version solver find the incompatible dependencies and in the cases where the requirements are wrong we can explicitly mark them with <code>override: true</code>.</p>
<p>On the other hand if we had lose requirements we would be in dependency hell with trying to figure out which dependencies are broken and hope that we have tests that cover all those cases for all of our direct and transitive dependencies. We would have just traded one set of problems with another that is harder to fix and have confidence in the solution.</p>
<p>The version solver is there to help you find compatible dependencies, with <code>&gt;=</code> version requirements the solver becomes useless and you have to do its job yourself.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="350335" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/conflicting-dependencies-and-use-of-the-operator/68207/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-350335" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="350335"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="350343" data-post-id="350343">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="zachdaniel" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/zachdaniel/120/31980_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  zachdaniel
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Ash</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>What are your thoughts on the more targeted override system? Does it seem useful and possible?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="350343" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/conflicting-dependencies-and-use-of-the-operator/68207/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-350343" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="350343"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="350373" data-post-id="350373">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ericmj" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ericmj/120/25920_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ericmj
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Elixir Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote group-Ash-Core-Team" data-username="zachdaniel" data-post="20" data-topic="68207" data-full="true">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/zachdaniel/48/31980_2.png" class="avatar"> zachdaniel:</div>
<blockquote>
<p>What are your thoughts on the more targeted override system? Does it seem useful and possible?</p>
</blockquote>
</aside>
<p>It’s an interesting proposal and I’m still thinking about it. I definitely understand the pain points with override and have noticed the same issues you are raising.</p>
<p>We cannot give an error message like “this override only overrides the dependency that <code>foo</code> at exactly version <code>x.x.x</code> has on <code>bar</code>”. Overrides are not implemented in the solver at a level where we can use to them to derive if they affected what caused the resolution failure.</p>
<p>We could warn as a post check: “you are overriding bar on behalf of <code>foo 1.2.3</code> but <code>foo 1.2.4</code> was picked”, but you could just as well pin <code>foo 1.2.3</code> and add a comment why it’s pinned and it would achieve basically the same thing?</p>
<aside class="quote group-Ash-Core-Team" data-username="zachdaniel" data-post="2" data-topic="68207">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/zachdaniel/48/31980_2.png" class="avatar"> zachdaniel:</div>
<blockquote>
<p>For example:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">{:jq, "~&gt; x.x", override: [:merquery]}
</code></pre>
<p>says “I know that merquery wants a different version, but I’m overriding it”. Then if later you update <code>merquery</code>, and no longer need the override, mix will instruct you to remove it.</p>
</blockquote>
</aside>
<p>This one is also tricky to implement in the solver. The only way to know if you no longer need the override is to run the solver again without the override and compare the results. This becomes a problem when you have multiple overrides because they affect each other.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="350373" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/conflicting-dependencies-and-use-of-the-operator/68207/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-350373" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="350373"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/68207/load_more?page=3">Load more posts (9 remaining)</a>
</div></template></turbo-stream>